是否存在在运行时生成 AST/解析树的解析器?有点像一个库,可以接受一串 EBNF 语法或类似的东西并吐出一个数据结构?
- 我知道 antlr、jlex 和他们的同类。他们生成可以做到这一点的源代码。(喜欢跳过编译步骤)
- 我知道 Boost::Spirit,它使用一些带有 C++ 语法的黑魔法在执行时生成这样的东西(肯定更接近我想要的,但在 C++ 方面我是个无赖。而且它仍然有点限制,因为你的语法是硬编码的)
- 我不知道 python 或 ruby 中的任何内容,尽管编译器编译器在这种语言中可能非常有效......
现在我知道解析器组合器了。(谢谢,乔纳斯)还有一些图书馆(谢谢 eliben)
顺便说一句,我最近还注意到Parsing Expression Grammars,如果有人实现它听起来很酷(他们说 Perl 6 会有它,但 Perl 回避了我的理解)