Parsing 带ε变换的左递归LR(0)项的闭包是什么?

Parsing 带ε变换的左递归LR(0)项的闭包是什么?,parsing,language-agnostic,grammar,lr,epsilon,Parsing,Language Agnostic,Grammar,Lr,Epsilon,假设我有这样的语法: A: ε | B 'a' B: ε | B 'b' 项目的结束被认为是什么?A:•B'A'? 换句话说,在计算闭包时,如何处理ε变换?这非常简单。包括在关闭 A = ... <dot> X ... ; A=。。。X; 都是规矩吗 X = <dot> R1 R2 R3 ... ; X=R1 R2 R3; 其中第一个(R1)不是空的。对于第一个(R1)中的每个(非空)令牌K,您需要(传递地!)包括 R1=k; 等等,但

假设我有这样的语法:

A: ε
 | B 'a'
B: ε
 | B 'b'
项目的结束被认为是什么?
A:•B'A'


换句话说,在计算闭包时,如何处理ε变换?

这非常简单。包括在关闭

    A = ... <dot> X ... ;
A=。。。X;
都是规矩吗

    X =   <dot> R1 R2 R3 ... ;
X=R1 R2 R3;
其中第一个(R1)不是空的。对于第一个(R1)中的每个(非空)令牌K,您需要(传递地!)包括

R1=k;
等等,但想必你已经很清楚了

您的具体问题是,如果R1可以为空,会发生什么?那你也 需要包括

    X =   R1 <dot> R2 ... ;
X=R1 R2;
类似地,对于R2为空,如果R1为空,对于Ri为空,如果R1。。Ri-1可以为空。在极端情况下,所有Ri都可能是空的(语法中有很多可选的子类),最终可能包括

    X =  R1 R2 ... Rn <dot> ;
X=R1 R2。。。注册护士;
请注意,确定第一个(R1)“可以为空”本身就是一个传递闭包问题


我为DMS预计算构建的GLR解析器生成器首先可以使用Warshall算法为空,然后在闭包构造中使用它。

LR(1)解析器的类似问题:嗯,有趣。。。澄清一下,你所说的“沃沙尔”是指弗洛伊德·沃沙尔吗?i、 所有对最短路径算法?是的,但是你不需要“最短”路径,只需要路径的“存在性”,所以你可以用位来完成整个过程,然后你意识到你可以用位向量来完成,从而获得非常显著的加速。
    X =  R1 R2 ... Rn <dot> ;