是否存在在运行时生成AST /解析树的解析器?有点像接受一串EBNF语法或类似的东西并吐出数据结构的库?
我知道antlr,jlex和他们的同类.他们生成可以执行此操作的源代码.(比如跳过编译步骤)
我知道Boost :: Spirit,它使用一些带有C++语法的黑魔法在执行时生成这样的东西(绝对更接近我想要的东西,但是当涉及到C++时我是个傻瓜.而且它仍然有点限制,因为你的语法是硬编码的)
我不知道python或ruby中的任何东西,尽管编译器编译器可能在这种语言中非常有效......
现在我知道解析器组合器.(谢谢,Jonas)和一些图书馆(感谢eliben)
顺便说一下,我最近也注意到了Parsing Expression Grammars,听起来很酷的是有人实现它(他们说Perl 6会有它,但是Perl逃避了我的理解)
看看我认为可能对你有帮助的解析器组合器.可以使用此技术在运行时创建解析器.一种流行的解析器组合器是Parsec,它使用Haskell作为其宿主语言.从parsec文档:
组合器解析器是在与程序的其余部分相同的编程语言中编写和使用的.语法形式(Yacc)和使用的实际编程语言(C)之间没有差距
解析器是语言中的一流价值观.它们可以放入列表中,作为参数传递并作为值返回.通过针对特定问题定制的自定义解析器,可以轻松扩展可用的解析器集
如果您使用的是.NET,请查看F#的解析器组合库.