2014-06-18 50 views
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 
} 
+0

http://stackoverflow.com/questions/16165352/why-cant-a-ll-grammar-be-left-recursive – didierc

+2

目前尚不清楚哪些符号是令牌,哪些是非终端。如果只有B和C是令牌,那么你需要重构语法或使用比你更多的lookahead。 –

+0

didierc:我会检查这一点。 @ n.m .:是'A:B | '!''更清楚? – Jack

回答