为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)?
答案 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)
语法,但它远没有那么干净。