我正在尝试制作一个上下文无关的语法来表示简单的正则表达式。我想要的符号是[0-9][az][AZ],运算符是“|”、“()”和“.” 对于连接,对于序列,我现在只想要“*”,稍后我将添加“+”,“?”等。我在 javacc 中尝试了这个语法:
void RE(): {}
{
FINAL(0) ( "." FINAL(0) | "|" FINAL(0))*
}
void FINAL(int sign): { Token t; }
{
t = <SYMBOL> {
if ( sign == 1 )
jjtThis.val = t.image + "*";
else
jjtThis.val = t.image;
}
| FINAL(1) "*"
| "(" RE() ")"
}
问题是在 FINAL 函数| FINAL(1) "*"
中给我一个错误的行Left recursion detected: "FINAL... --> FINAL...
。将“*”放在 FINAL(1) 的左侧可以解决问题,但这不是我想要的..
我已经尝试从维基百科阅读文章以删除左递归,但我真的不知道该怎么做,有人可以帮忙吗?:秒