2014-08-31 16 views
0

我有這些正則表達式:如何創建一個生成匹配此正則表達式的字符串的方法?

M := (M) 
M := n 

這些表達式可以產生字符串,例如:((((N))))中,n,(n)的等

我必須創建一個方法可以檢查一個字符串是語法的一部分,它不一定必須是一個代碼,它更像步驟你開始編碼

class Sintax { 
    Lexic l = new Lexic(); 
    int p = 0; 
    void M(){ 
     if(lexicalSImbol == 'n') 
     { 
      if(p != 0) 
       checkParentesis(); 
      else 
       checkEndOfString(); 
     } 
     else if(lexicalSimbol == '(') 
     { 
      p++; 
      M(); 
     } 
     else 
      error(); 
    } 

    void checkParentesis(){ 
     int i = 1; 
     while(i <= p) 
     { 
      if(l.nextSimbol() == ')') 
       i++; 
      else 
       error(); 
     } 
    } 
} 

之前,但我不知道如果方法能夠傳遞語法可以產生的所有字符串,或者如果我可以改變它在某種程度上使它更有效率。

+0

爲您的方法創建單元測試,並確保它生成預期結果。 – 2014-08-31 17:39:46

+4

看起來更像是一個語法而不是正則表達式。 – 2014-08-31 17:47:39

+0

另外,從理論上來說,這已經有一段時間了,但看起來沒有上下文,並不經常。 – chrylis 2014-08-31 18:06:59

回答

0

checkParentesis必須以checkEndOfString();作爲錯誤輸入"(n))"結束。 因此,代碼可以減少:

void M(){ 
    if(lexicalSImbol == 'n') 
    { 
     //checkParentesis(); 
     while (p > 0 && l.nextSimbol() == ')') 
      --p; 
     checkEndOfString(); 
    } 
    else if(lexicalSimbol == '(') 
    { 
     p++; 
     M(); 
    } 
    else 
     error(); 
} 
相關問題