【发布时间】:2010-09-26 19:22:58
【问题描述】:
如果我想创建自己的语言,有什么工具可以帮助我吗?我听说过 yacc,但我想知道如何在语言中实现我想要的功能。
【问题讨论】:
标签: language-design
如果我想创建自己的语言,有什么工具可以帮助我吗?我听说过 yacc,但我想知道如何在语言中实现我想要的功能。
【问题讨论】:
标签: language-design
ANTLR 是一个用 Java 编写的非常好的解析器生成器。还有一个terrific book 可用。
【讨论】:
我推荐的第一个工具是 Dragon Book。这是构建编译器的参考。设计一门语言绝非易事,实现它更是难上加难。龙书有帮助。本书甚至参考了标准的 unix 工具 lex 和 yacc。 gnu 等效工具称为 flex 和 bison。它们都生成词法分析器和解析器。还有更现代的工具用于生成词法分析器和解析器,例如对于 java 有 ANTLR(我还记得 javacc 和 CUP,但我自己只使用了 ANTLR)。 ANTLR 结合了解析器和词法分析器以及可用的 Eclipse 插件这一事实使其使用起来非常舒适。但是要比较它们,你需要的解析器类型,并知道你需要它们,你应该阅读 Dragon 的书。您还必须考虑其他一些事情,例如运行时环境、编程范式......
如果您已经有了一定的设计理念,并且在某个步骤或细节方面需要帮助,那么 anwsers 可能会更有帮助。
【讨论】:
密切相关的问题(全部通过在 stackoverflow 上搜索 [compiler] 获得):
...
和类似的主题(来自同一个搜索):
...
编辑:我知道与 stackoverflow 相关的问题搜索不是我们想要的,但是 我们真的需要这个主题的第 n 次迭代吗?嗯!
【讨论】:
我喜欢 Flex (Fast Lex) [词法扫描仪]
和 Bison (A Hairy Yacc) [又一个编译器编译器]
两者都是免费的,可用于所有 *NIX 安装。对于 Windows,只需安装 cygwin。
但我是老派。
通过使用这些工具,您还可以找到 Internet 上许多流行语言的 lex 规则和 yacc 语法。从而为您提供快速启动和运行的方法,然后您可以随时自定义语法。
示例:算术表达式处理 [优先顺序等是一个完蛋的问题] 您可以从网络上快速获取此语法。
可以考虑的替代方法是编写 GCC 的前端扩展。
不平凡,但如果你想要一种编译语言,它会在代码生成部分节省大量工作(你仍然需要了解爱和了解 flex/bison)。
【讨论】:
我从来没有完成完整的语言,我用过 rply 和 llvmlite 实现了一个简单的 foxbase 语言,在https://github.com/acekingke/foxbase_compiler
所以如果你想使用 python,rply 或 llvmlite 会很有帮助。
如果你想使用 golang,goyacc 可能有用。但是你应该通过手工硬编码来编写一个词法分析器。或者你可以使用https://github.com/acekingke/lexergo来简化它。
【讨论】: