4
嗯,我不知道我应该如何编写一个函数,使用递归下降解析来解析像下面这样的语法。其实,我不知道我在做正确的吧...在BNF语法中的递归
BNF:
A : B | A '!'
B : '[' ']'
伪代码:
f()
{
if(tok is B)
parse_b();
return somethingB
else if(????) how will I know if it's start of A or I don't need to?
x = f();
parse_c();
return somethingA
}
我这样做(没有检查,以确定这是一个A,但我觉得有什么问题):
f()
{
if(tok is B)
parse_b();
return somethingB
else
x = f();
parse_c();
return somethingA
}
http://stackoverflow.com/questions/16165352/why-cant-a-ll-grammar-be-left-recursive – didierc
目前尚不清楚哪些符号是令牌,哪些是非终端。如果只有B和C是令牌,那么你需要重构语法或使用比你更多的lookahead。 –
didierc:我会检查这一点。 @ n.m .:是'A:B | '!''更清楚? – Jack