【问题标题】:Automatic grammar transformation for left-factoring; and left-recursion removal左分解的自动语法转换;和左递归删除
【发布时间】:2013-06-23 22:08:53
【问题描述】:

标准方法很容易将不是 LL(1) 的上下文无关文法转换为等价的文法。是否有任何可用的工具可以自动执行此过程?

在下面的示例中,我对非终端使用大写字母,对终端使用小写。

以下左递归非终结符:

A  -> A a | b

可以转化为右递归形式:

A  -> b A'
A' -> NIL | a A'

请注意,尽管左递归产生式规则确保表达式与左相关联,右递归产生式也是如此;因此语法修改也会改变表达式的关联性。

另一个问题是间接左递归,例如:

A -> B a
B -> A b

左因子也用于确保解析器只需要一个前瞻标记。以下产生式必须向前看两个标记:

A  -> a b | a c

这也可以重构;到:

A  -> a (b | c)

是否有任何软件工具可以自动进行这些语法转换?从而产生适用于 LL(1) 解析器的等价文法?

【问题讨论】:

    标签: parsing grammar parsec left-recursion


    【解决方案1】:

    Haskell 语法组合库here 允许将语法转换为非左递归形式。输入语法必须是 parsing expression grammar

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多