【问题标题】:Creating your own language创建自己的语言
【发布时间】:2010-09-26 19:22:58
【问题描述】:

如果我想创建自己的语言,有什么工具可以帮助我吗?我听说过 yacc,但我想知道如何在语言中实现我想要的功能。

【问题讨论】:

标签: language-design


【解决方案1】:

ANTLR 是一个用 Java 编写的非常好的解析器生成器。还有一个terrific book 可用。

【讨论】:

    【解决方案2】:

    我推荐的第一个工具是 Dragon Book。这是构建编译器的参考。设计一门语言绝非易事,实现它更是难上加难。龙书有帮助。本书甚至参考了标准的 unix 工具 lex 和 yacc。 gnu 等效工具称为 flex 和 bison。它们都生成词法分析器和解析器。还有更现代的工具用于生成词法分析器和解析器,例如对于 java 有 ANTLR(我还记得 javacc 和 CUP,但我自己只使用了 ANTLR)。 ANTLR 结合了解析器和词法分析器以及可用的 Eclipse 插件这一事实使其使用起来非常舒适。但是要比较它们,你需要的解析器类型,并知道你需要它们,你应该阅读 Dragon 的书。您还必须考虑其他一些事情,例如运行时环境、编程范式......

    如果您已经有了一定的设计理念,并且在某个步骤或细节方面需要帮助,那么 anwsers 可能会更有帮助。

    【讨论】:

      【解决方案3】:

      密切相关的问题(全部通过在 stackoverflow 上搜索 [compiler] 获得):

      和类似的主题(来自同一个搜索):


      编辑:我知道与 stackoverflow 相关的问题搜索不是我们想要的,但是 我们真的需要这个主题的第 n 次迭代吗?嗯!

      【讨论】:

        【解决方案4】:

        我喜欢 Flex (Fast Lex) [词法扫描仪]
        和 Bison (A Hairy Yacc) [又一个编译器编译器]

        两者都是免费的,可用于所有 *NIX 安装。对于 Windows,只需安装 cygwin。
        但我是老派。

        通过使用这些工具,您还可以找到 Internet 上许多流行语言的 lex 规则和 yacc 语法。从而为您提供快速启动和运行的方法,然后您可以随时自定义语法。

        示例:算术表达式处理 [优先顺序等是一个完蛋的问题] 您可以从网络上快速获取此语法。

        可以考虑的替代方法是编写 GCC 的前端扩展。
        不平凡,但如果你想要一种编译语言,它会在代码生成部分节省大量工作(你仍然需要了解爱和了解 flex/bison)。

        【讨论】:

          【解决方案5】:

          我从来没有完成完整的语言,我用过 rply 和 llvmlite 实现了一个简单的 foxbase 语言,在https://github.com/acekingke/foxbase_compiler

          所以如果你想使用 python,rplyllvmlite 会很有帮助。 如果你想使用 golang,goyacc 可能有用。但是你应该通过手工硬编码来编写一个词法分析器。或者你可以使用https://github.com/acekingke/lexergo来简化它。

          【讨论】:

            猜你喜欢
            • 2011-04-09
            • 2020-02-22
            • 1970-01-01
            • 2014-11-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-04
            • 1970-01-01
            相关资源
            最近更新 更多