【发布时间】:2014-06-18 01:55:13
【问题描述】:
好吧,我不确定我应该如何使用递归下降解析来编写一个函数来解析如下所示的语法。实际上,我不确定我是否做得对...
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
}
【问题讨论】:
-
不清楚您的哪些符号是令牌,哪些是非终结符。如果只有 B 和 C 是标记,那么您需要重构语法或使用比您更多的前瞻。
-
有关如何构建递归下降解析器的详细信息,请参阅stackoverflow.com/a/2336769/120163
-
... 或重构你的解析器。写下属于该语言的几个字符串,看看你的函数将如何处理它们。
-
嗯。 B是代币吗?如果不是,它的规则在哪里?如果是的话……你为什么叫它B?
标签: c recursion compiler-construction bnf recursive-descent