真实世界的LR(k> 1)语法?

时间:2013-11-26 02:18:13

标签: parsing grammar context-free-grammar lr

为k制作人工LR(k)语法> 1很容易:

Input: A1 B x
Input: A2 B y                   (introduce reduce-reduce conflict for terminal a)
A1   : a
A2   : a
B    : b b b ... b              (terminal b occurs k-1 times)

但是,有没有真实世界非LR(1)计算机语言LR(k> 1)可解析?
或者非LR(1)语言也不是LR(k)?

1 个答案:

答案 0 :(得分:3)

如果一种语言具有LR(k)语法,那么它具有LR(1)语法,可以从LR(k)语法中机械地生成;此外,可以从LR(1)解析树重新创建原始解析树。这个定理的证明出现在Parsing Theory Vol。第6.7节中。 II,Sippu& Soisalon-Soininen;他们将其归因于MD Mickunas在JACM 23:17-30中的“关于LR(k)语法的完全覆盖问题”(1976)。

因此,LR(k)的{​​{1}}没有可解析的语言,它也不能解析为k>1,因此实际上不存在LR(1) < em> language 表示LR(k)除0和1以外的值。

但是,有些语言更容易k语法。一个典型的例子是LR(2)的Posix语法,它不需要以yacc终止作品。这是明确的,因为生产必须以标识符后跟冒号开头。这样写的,语法显然是;;根据上述定理,存在一个LR(2)语法,但它远没有那么干净。