嗯,我不确定如何使用递归下降解析来编写一个函数来解析下面的语法。实际上,我不确定我是否做得对...
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 :(得分:2)
请参阅我对details on how to build a recursive descent parser上另一个类似问题的回答。
特别是它解决了解析器的结构,以及如何通过检查语法规则(包括处理列表)来完成它的派生。