与Generating n statements from context-free grammars类似,我想从语法中随机生成句子。
什么是一个很好的解析器生成器,用于操作实际语法产生本身?我希望解析器生成器实际上允许我访问产品(生产对象?)。
如果我的语法类似于:
start_symbol ::= foo
foo ::= bar | baz
什么是好的解析器生成器:
foo
)foo
显然,每个解析器都有生产的内部表示和将生产与其RHS相关联的方法,但哪个解析器很容易操作这些内部?
注意:我提到的另一个SO问题链接的博客entry有一些自定义CFG解析器。我想将实际语法用于真正的解析器,而不是生成我自己的语法解析器。
答案 0 :(得分:3)
编写一个与解析器生成器接受的语法相匹配的语法应该很容易。 (使用开源解析器生成器,你应该能够从解析器生成器源代码中获取这样的语法;然后它们都具有自我语法)。然后,您可以解析解析器生成器接受的任何语法。
如果你想操作解析的语法,你需要一个相同的抽象语法树。您可以使大多数解析器生成器通过使用内置机制或您添加的特殊代码来构建树。