0

假设我有一个这样的 EBNF:

<Expr> -> <Term> {( + | - ) <Term>}

{} 括号意味着选择零个或多个,所以我怎么知道我什么时候有<Term>什么<Term> + <Term> + <Term>时候我正在逐个字符地读取行字符?

4

1 回答 1

1

假设您有一个递归下降解析器,您想要做的是向前看一个令牌。如果您刚刚阅读 a<Term>并且下一个标记是+or-然后您遵循此生产。如果不是,那么这个<Expr>生产就完成了,你返回给调用者。

要在代码中实现这一点,您需要一个全局lookaheadToken变量之类的东西。您可以使用该令牌来决定如何在实际提交特定生产和使用令牌之前进行解析。

于 2013-01-16T04:35:39.987 回答