假设我有一个像这样的EBNF:
<Expr> -> <Term> {( + | - ) <Term>}
{}括号意味着选择零或更多,那么当我逐字逐句地读取字符时,我怎么知道<Term>
与<Term> + <Term> + <Term>
之类的东西?
答案 0 :(得分:1)
假设你有一个递归下降解析器,你想要做的是向前看一个令牌。如果您刚刚阅读了<Term>
,而下一个令牌是+
或-
,那么您就会关注此作品。如果不是,那么此<Expr>
制作已完成,您将返回到来电者。
要在代码中实现此功能,您需要类似全局lookaheadToken
变量的内容。在实际提交特定生产并使用令牌之前,您可以使用该令牌来决定如何继续解析。