我如何解释这个语法?我不明白为什么有些词是粗体的。
如果我为此编写解析树/表,我会包含粗体字吗?我想弄清楚图片中的语法是否为 LL(1),但不明白如何阅读。任何帮助,将不胜感激!
粗体项是标记(在 <variable> 中,ab 和 c 也应该是粗体;你的老师的错误)。尖括号中的项目是生产规则。
语法是 LL(1),如果对于每个地方都存在替代方案(由|分隔),解析器可以通过仅查看一个标记(下一个标记)来决定采用哪个替代方案。
以 <stmt> 规则为例。它有四种选择。<ifstmt> 必须以标记if开头。<whilestmt> 必须以标记while开头。<block> 必须以标记begin 开头。只剩下 <assign>,它必须以变量开头,即恰好是a、b或c之一。所以就 <stmt> 而言,LL(1) 解析器可以处理该规则,因为它可以通过仅检查一个标记来在四种可能性之间做出决定。
如果任何规则需要(例如)检查两个标记,则 LL(1) 解析器无法处理该语法 - 它需要 LL(2) 解析器。
我希望这有帮助。