【问题标题】:C style Scripting language [closed]C风格的脚本语言[关闭]
【发布时间】:2014-03-30 08:55:09
【问题描述】:

我正在尝试为教育目的开发一个简单的C style scripting language

到目前为止我所做的事情:

  • 定义syntax的语言
  • tokenizing 语言编写代码。

我现在想要包含的功能:

  • 数学
  • 条件
  • while 循环(仅限)

目前我不想在语言中添加其他功能,因为这会使开发过程变得相当复杂。

但是,我不知道开发语言所涉及的后续步骤是什么。我已经经历了很多关于 SO 的问题,但它们的细节并不是很具体。请指导我完成此过程。

【问题讨论】:

    标签: programming-languages


    【解决方案1】:

    我认为这些答案对开始很有帮助:

    如果您定义了EBNF 语法,那么您可以使用BISON 之类的工具来创建解析器。使用该解析器生成抽象语法树,然后您可以继续为您的语言创建解释器。

    【讨论】:

    • 您能介绍一下句法分析算法吗?我不想使用任何库进行解析或语法分析。我想从scrathc写一切
    • 您的意思是要手动编写解析器而不是使用解析器生成器?您必须(如果我正确理解该过程)从您的分词器生成的令牌创建某种树。我建议使用某种解析器生成器,因为它可以更轻松地尝试不同类型的语言语法。
    【解决方案2】:

    几年前,我也一直在开发自己的语言(它是解释语言),在语言准备好让“其他人”尝试的阶段,我发现我应该早点做一些事情,或者做得更好:

    1. 用该语言解决大量简单的编程问题
    2. 只解决几个问题,但我会称之为“硬核”编程问题(例如Project Euler
    3. 编写复杂的语言规范、几个示例、wiki 或常见问题解答,以及任何可以让您一直回答相同问题的内容

    希望对您有所帮助。

    【讨论】:

    • 您是用哪种语言编写的?您是否使用任何库进行解析或 ast,或者您从头开始编写所有内容?
    【解决方案3】:

    是的,这样做了好几次,我知道很难知道从哪里开始。而且你真的不需要 Lex、Yacc 或 Bison。

    1. 确保您已经确定了词汇元素(标记)和语法(在 EBNF 中)的定义。
    2. 为您的标记编写一个词法分析器。它应该能够读取发出令牌并优雅结束的示例程序。
    3. 写一个符号表。这是您在识别符号时放置符号的地方。您也可以将保留字和文字放在这里,也可以不放。这是一种设计选择。
    4. 编写一个递归下降解析器,它具有识别语法中每个产生式的功能。您可能需要修改语法才能做到这一点。
    5. 为您的 AST(抽象语法树)编写树/节点管理器。解析器在识别产生式时将节点添加到带有符号表链接的树中。

    假设你已经走到这一步,最后两个步骤是:

    1. 遍历 AST 执行类型和参考分辨率、一些优化等。
    2. 通过 AST 发出代码。

    最后两步是最辛苦的地方。

    您将需要一些具体的参考资料,而您选择的内容取决于您的水平、您喜欢阅读的内容以及您喜欢编写的语言。龙书是一个显而易见的选择,但还有很多其他选择。我建议你看这里:Learning to write a compiler

    【讨论】:

      猜你喜欢
      • 2011-03-10
      • 2011-03-12
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2013-06-19
      • 2011-08-17
      • 2012-10-02
      相关资源
      最近更新 更多