如果我想创建自己的语言,有什么工具可以帮助我吗?我听说过 yacc,但我想知道如何在语言中实现我想要的功能。
5 回答
密切相关的问题(全部通过在[compiler]
stackoverflow 上搜索得到):
和类似的主题(来自同一个搜索):
编辑:我知道与 stackoverflow 相关的问题搜索不是我们想要的,但我们真的需要这个主题的第 n 次迭代吗?呸!
我推荐的第一个工具是 Dragon Book。这是构建编译器的参考。设计一门语言绝非易事,实现它更是难上加难。龙书有帮助。本书甚至参考了标准的 unix 工具 lex 和 yacc。gnu 等效工具称为 flex 和 bison。它们都生成词法分析器和解析器。还有更现代的工具用于生成词法分析器和解析器,例如对于 java 有 ANTLR(我还记得 javacc 和 CUP,但我自己只使用了 ANTLR)。ANTLR 结合了解析器和词法分析器以及可用的 Eclipse 插件这一事实使其使用起来非常舒适。但是要比较它们,你需要的解析器类型,并知道你需要它们,你应该阅读 Dragon 的书。您还需要考虑其他一些事情,例如运行时环境、编程范式......
如果您已经有了某些设计理念并且需要某个步骤或细节的帮助,那么 anwsers 可能会更有帮助。
ANTLR 是一个用 Java 编写的非常好的解析器生成器。还有一本很棒的书。
我喜欢 Flex (Fast Lex) [词法扫描器]
和 Bison (A Hairy Yacc) [Yet another compiler compiler]
两者都是免费的,可用于所有 *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来简化它。