如何创建一个生成与此正则表达式匹配的字符串的方法?

时间:2014-08-31 17:35:49

标签: java

我有这些正则表达式:

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();
       }
    }
}

但我不确定该方法是否能够提供语法可以生成的所有字符串,或者我是否可以通过某种方式更改它以使其更有效。

1 个答案:

答案 0 :(得分:0)

对于错误的输入checkParentesis

checkEndOfString();必须以"(n))"结尾。 所以代码可以减少:

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