我有这些正则表达式:
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 :(得分:0)
checkParentesis
, checkEndOfString();
必须以"(n))"
结尾。
所以代码可以减少:
void M(){
if(lexicalSImbol == 'n')
{
//checkParentesis();
while (p > 0 && l.nextSimbol() == ')')
--p;
checkEndOfString();
}
else if(lexicalSimbol == '(')
{
p++;
M();
}
else
error();
}