有一个用于识别可为空非终结符的标准算法,该算法在时间上与语法大小呈线性关系(见下文)。完成此操作后,您可以A potentially-starts-with B在所有非终结符A,上构建关系B。(事实上,在所有语法符号上构造这种关系更为正常,因为它也用于构造FIRST集合,但在这种情况下,我们只需要投影到非终结符上。)
完成此操作后,左递归非终结符都A满足,其中是:A potentially-starts-with+ Apotentially-starts-with+
potentially-starts-with \xe2\x88\x98 potentially-starts-with*
您可以使用任何传递闭包算法来计算该关系。
\n\n作为参考,检测可为空的非终结符。
\n\n一旦不再可能从工作队列中选择产生式,所有ε-非终结符都已被识别。
\n\n只是为了好玩,可以对上述算法进行简单修改来执行步骤 1。我将把它作为练习(这也是龙书中的练习)。确保上述算法在线性时间内执行的方法也作为练习。
\n