LL(1)语法解释

时间:2015-10-08 22:23:23

标签: parsing context-free-grammar ll context-free-language

我如何解释这个语法?我无法理解为什么有些词是粗体的。

enter image description here

如果我正在为此编写一个解析树/表,我会包含粗体字吗?我试图弄清楚pic中的语法是否为LL(1),但不明白如何阅读它。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

粗体项是令牌(在<变量>中,b和c也应该是粗体;你老师的错误)。尖括号中的项目是生产规则。

语法是LL(1),如果,对于每个存在替代的地方(由 | 分隔),解析器可以通过仅查看一个令牌(下一个令牌)来决定要追求的替代方案)。

例如,< stmt>规则。它有四种选择。 < ifstmt>必须以令牌 if 开头。 < whilestmt>必须以令牌开始开头。 <嵌段>必须以令牌开始开头。只剩下< assign>,它必须以变量开头,即 a b c 中的一个。至于< stmt>值得关注的是,LL(1)解析器可以处理该规则,因为它可以通过仅检查一个令牌来决定四种可能性。

如果任何规则要求(例如)检查两个令牌,则LL(1)解析器无法处理该语法 - 它需要LL(2)解析器。

我希望这会有所帮助。