我知道对于递归下降解析器使用的语法有两种类型的限制。
我理解第一个,但在第二个限制上有点迷失。为什么这种限制是必要的,没有它就可以生产?
答案 0 :(得分:2)
通过要求解析器可以根据第一个android
令牌(而不是基于单个令牌)决定使用哪个生产,可以稍微放宽第二个限制。这允许为这类语法提供有效(即线性时间)的解析算法(参见Recursive descent parser)。
在实践中选择k
的主要原因似乎是k=1
语法的解析器更容易构造。显然,许多计算机语言都是由LL(1)
语法生成的。请参阅LL parser。
由作品LL(1)
,S -> A | B
和A -> a A b | eps
组成的语法是非模糊非B -> a B b b | eps
语法的示例,因为解析器无法决定哪个生成基于单个令牌使用。 (取自here。)