Language design 设计编程语言时应牢记的事项

Language design 设计编程语言时应牢记的事项,language-design,Language Design,我正在为我的个人使用和教育设计一种编程语言。参考编译器的第一个版本将把源代码编译成其他语言,比如C。我应该记住什么,以确保编译到其他源代码和二进制可执行文件的速度都很快?还有什么好知道的吗 尽管我谈到编译速度,但问题的主要焦点是语言,而不是编译器。除非您严重错误地设计语言,否则编译速度几乎不会成为问题。您应该关注所需的语法和语义。如果您的重点是学习编译器设计,我认为编译速度将不是您的首要任务。我建议您首先使用递归后代技术手动实现一个自顶向下的解析器,这很简单,也很简单。还可以使用使用有限状态机手

我正在为我的个人使用和教育设计一种编程语言。参考编译器的第一个版本将把源代码编译成其他语言,比如C。我应该记住什么,以确保编译到其他源代码和二进制可执行文件的速度都很快?还有什么好知道的吗


尽管我谈到编译速度,但问题的主要焦点是语言,而不是编译器。

除非您严重错误地设计语言,否则编译速度几乎不会成为问题。您应该关注所需的语法和语义。

如果您的重点是学习编译器设计,我认为编译速度将不是您的首要任务。我建议您首先使用递归后代技术手动实现一个自顶向下的解析器,这很简单,也很简单。还可以使用使用有限状态机手动设计的lexer,这也很简单,但概念上非常丰富

在定义语言的语法时,必须确保其一致性和明确性。如果您熟悉Prolog,可以在实现它之前使用确定子句语法(DCG)来使用您的语言。我觉得它很有用

然后,您可以使用工具(如Bison、ANTLR、Lemon、Yacc等)来实现lexer和parser

另一个建议是保持简单。您可以实现要构建的语言的子集,并对其进行润色,直到您对其感到满意为止,然后通过实现新特性来扩展它,等等。你会发现自己的语言和编译器在不断发展,它会变得越来越大,越来越完整,随着它越来越好,你会感到更加自信和满意。毕竟这是一个很好的挑战

玩得开心。学习编译器设计只是一个有趣的话题

附言:阅读