【问题标题】:Programming language design编程语言设计
【发布时间】:2011-04-05 01:10:11
【问题描述】:

我创建了一种编程语言并在我的计算机中编写了它。这是我为了好玩而创建的一种实验性非专业编程语言。

一门语言需要最重要的东西,一个编译器。

将源代码转换为C/++并调用GCC是个好主意吗?

我的语言看起来像 C++ 和 Java,如果没有解析器,转换也不难。

我的目标不是优化任何东西,也不是为每个平台生成二进制文件。如果我生成 C 源代码,我可以为许多平台编译它并使用 GCC 优化。

我不知道可以帮助我的工具,我知道名称的一些工具是 yacc 和 llvm,但我不知道它们如何帮助我。

fun第一部分是编程语言的设计,第二部分是runtime细节的实现。我认为解析器实现不是很有趣。

谢谢

【问题讨论】:

    标签: programming-languages compiler-construction


    【解决方案1】:

    为了对抗 Mehrdad,将您的语言转换为 C 是一个好主意。许多语言编译器编译为 C,将其用作“可移植程序集”。现在,为 GCC 创建一个前端是一个好主意,但它在初始复杂性方面提高了标准。创建 C 代码比 GCC 的前端要简单得多。

    或者,就此而言,将其转换为您认为合适的目标语言,无论您喜欢什么。例如,我编写了创建 Java 代码的编译器。

    你的语言中的语法部分可能不是很有趣,但它可能是你的第一个挫折点。因此,明智的做法是稍微注意其他语言的功能,并查看它们的语法。如果您认为您的语言可以使用它,请考虑一些简单的 Pascal 递归解析器。或者查找 Yacc 和 ANTLR 语法。

    大多数人最初觉得令人沮丧的只是表达方式。

    a + b * ( c - sqrt(12 / 4) + sin(30))
    

    许多人在使用表达式时遇到问题。在您获得表达式工作后,其余的就可以轻松到位(假设您正在使用类似 Algol/C 的语言与其他一些语法风格)。

    【讨论】:

      【解决方案2】:

      我自己并不是这个主题的专家,但据我所知,将您的代码“转换”为 C 或 C++ 是一个非常糟糕的想法,尤其是 使用 GCC 时。

      GCC 被设计为具有“插件”架构。您应该做的是为 GCC 编译器创建一个 前端,该编译器能够处理您的语言中的代码,并让 GCC 的 后端 负责代码生成和优化。

      (我自己没有做过,所以我不知道它是如何工作的。)

      【讨论】:

        【解决方案3】:

        如果你的真正目标——记住,我的意思是,你认为从事的工作会很有趣;-)——是语言设计,那么我会说避免编写自己的完整目标是完全可以的——吹编译器。唯一的问题是,编写 Your Language to C(++) 翻译器是否容易得多?它可能比为 gcc 或 LLVM 编写前端更容易(尽管如果您的目标不同,这些都是严肃的方法)。

        我的建议是从 C/C++ 翻译器开始。

        【讨论】:

          猜你喜欢
          • 2010-09-12
          • 2010-11-15
          • 2012-12-15
          • 2011-04-30
          • 1970-01-01
          • 1970-01-01
          • 2011-06-11
          • 1970-01-01
          相关资源
          最近更新 更多