编程语言设计

3

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

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

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

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

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

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

好玩的第一部分是设计编程语言,好玩的第二部分是实现运行时细节。我认为解析器实现并不是很有趣。

谢谢。

3个回答

4
为了解决Mehrdad的问题,将您的语言转换为C是一个好主意。许多编程语言编译器都可以编译成C语言,将其作为“可移植汇编”的一种形式。现在,为GCC创建前端是个好主意,但它会增加初始复杂度。相比于为GCC创建前端,创建C代码要简单得多。
或者,您也可以将其转换为任何您认为合适的目标语言,无论您熟悉哪种语言。例如,我曾经编写过生成Java代码的编译器。
您的语言的语法部分可能不是很有趣,但这很可能是您遇到的第一个挫折点。因此,建议您留意其他编程语言的语法,并查看它们的语法。如果您认为自己的语言可以与之匹配,可以考虑使用一些简单的Pascal递归下降解析器。或者寻找Yacc和ANTLR语法。
最初大多数人感到沮丧的是表达式部分。
a + b * ( c - sqrt(12 / 4) + sin(30))

许多人在使用表达式时会遇到问题。一旦您掌握了表达式的使用方法,其他内容就可以轻松地落实(假设您正在使用类似Algol/C语言的语法风格,而不是其他类型的语法)。

2
我本身并不是这个话题的专家,但据我所知,“转换”您的代码为C或C++是一个相当糟糕的想法,特别是在使用GCC时。
GCC旨在具有“插件”架构。相反,您应该创建适用于GCC编译器的前端来处理您的语言代码,并让GCC的后端负责代码生成和优化。
(我自己没有做过这个,所以不知道它如何工作的细节。)

2
如果您真正的目标是语言设计(记住,我指的是您认为有趣的工作内容;-),那么避免编写自己的完整编译器是完全可以的。唯一的问题是,编写Your Language到C(++)的转换器是否更容易?这可能比编写gcc或LLVM的前端要容易得多(尽管如果您的目标不同,这些都是严肃的方法)。
我的建议是从一个C/C++翻译器开始。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接