答案 0 :(得分:1)
粗体项是令牌(在<变量>中,b和c也应该是粗体;你老师的错误)。尖括号中的项目是生产规则。
语法是LL(1),如果,对于每个存在替代的地方(由 | 分隔),解析器可以通过仅查看一个令牌(下一个令牌)来决定要追求的替代方案)。
例如,< stmt>规则。它有四种选择。 < ifstmt>必须以令牌 if 开头。 < whilestmt>必须以令牌开始开头。 <嵌段>必须以令牌开始开头。只剩下< assign>,它必须以变量开头,即 a , b 或 c 中的一个。至于< stmt>值得关注的是,LL(1)解析器可以处理该规则,因为它可以通过仅检查一个令牌来决定四种可能性。
如果任何规则要求(例如)检查两个令牌,则LL(1)解析器无法处理该语法 - 它需要LL(2)解析器。
我希望这会有所帮助。