【问题标题】:Grammar restrictions on token look ahead对令牌的语法限制前瞻
【发布时间】:2016-03-24 13:13:41
【问题描述】:

我知道递归下降解析器使用的语法有两种类型的限制。

  1. 语法不能有任何左递归产生式
  2. 语法不能要求多于标记前瞻。

我理解第一个,但对第二个限制有点迷茫。为什么这个限制是必要的,没有它,生产甚至可以存在吗?

【问题讨论】:

    标签: java compiler-construction grammar left-recursion


    【解决方案1】:

    第二个限制可以通过要求解析器可以根据第一个 k 标记(而不是基于单个标记)决定使用哪个产品来稍微放宽。这允许对此类语法进行高效(即线性时间)解析算法(请参阅Recursive descent parser)。

    在实践中选择k=1 的主要原因似乎是LL(1) 语法的解析器更容易构造。显然,许多计算机语言被设计为由LL(1) 语法生成。见LL parser。

    由产生式S -> A | B、A -> a A b | eps 和B -> a B b b | eps 组成的文法是非歧义非LL(1) 文法的一个示例,因为解析器无法根据单个标记决定使用哪个产生式。 (取自here。)

    【讨论】:

    • 您有没有该属性的制作示例。我正在尝试将其可视化...
    • 由产生式 S -> A | B、A -> a A b | eps 和 B -> a B b b | eps 组成的文法是非歧义非 LL(1) 文法的一个示例,因为解析器无法决定使用哪个产生式在一个令牌上。 (取自here。)
    猜你喜欢
    • 2011-06-09
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 2013-01-27
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多