Compiler construction 您将如何着手编写一种简单的编程语言?

Compiler construction 您将如何着手编写一种简单的编程语言?,compiler-construction,language-design,Compiler Construction,Language Design,可能的重复项: 我想编写一种语法与QBasic相似但更简单的编程语言。我希望它是为新手程序员准备的。它的简单性将鼓励有抱负的程序员不要放弃,让他们对编程感兴趣。例如: 而不是QBasic的 打印“你好,世界!” 我会用 写“你好,世界!” 或者更像VB 写(“你好,世界”) 我将如何调整基本语法以形成我的语言?这不是一项简单的任务。语言分析和编译理论是相当重要的学科。很多数学题。您还必须决定要针对哪个平台,这也将决定您的语言是完全编译的(例如C/C++,Pascal),编译成字节码(例如Py

可能的重复项:


我想编写一种语法与QBasic相似但更简单的编程语言。我希望它是为新手程序员准备的。它的简单性将鼓励有抱负的程序员不要放弃,让他们对编程感兴趣。例如: 而不是QBasic的 打印“你好,世界!”

我会用

写“你好,世界!”

或者更像VB

写(“你好,世界”)


我将如何调整基本语法以形成我的语言?

这不是一项简单的任务。语言分析和编译理论是相当重要的学科。很多数学题。您还必须决定要针对哪个平台,这也将决定您的语言是完全编译的(例如C/C++,Pascal),编译成字节码(例如Python,Java),还是在运行时解释的(例如VBScript,JavaScript)。要指定语言本身,请刷新

为了帮助您,有几种健壮的解析器生成器,包括:

  • Lex/Yacc(Flex/Bison是GNU版本)-旧式行业标准。用于在C/C中开发编译器++
  • -如果您对使用Java创建编译器感兴趣
  • 一种不同的方法,允许使用C++本身的语言规范。
还有更多。可以找到一个比较,同时还可以找到另一个列表

如果你真的对完整的理论感兴趣,你想看看


但我必须重申:这是一个大问题。有很多很多工具可以帮助你,但是兔子洞非常深。

我认为这一点的关键是:

  • 简单易用
  • 易于设计/实现
  • 较强的表达能力
  • 从中选出1.9个

    这是非常有可能得到一个合理的程度,其中任何两个。完全做到任何两个都是非常困难的,而试图做到这三个都会让你陷入一个没有人的境地,在那里你做得并不好


    p、 “它的简单性会鼓励有抱负的程序员不要放弃,让他们对编程感兴趣。”——这并不是让你气馁,但简单化的语言往往会在很短的时间内进入人们的生活。我更喜欢简单的语言,但不适合更大/更复杂的任务(特别是Python)。除此之外,您是在询问输入语法应该是什么样的,还是希望得到关于如何实际解析它的提示?您是对的。我从去年开始学习BASIC,我非常喜欢它,所以现在我正在尝试学习C,这样我可以做一些更深入的编程。我还学习了visualbasic。然而,我确实认为,如果我能以某种方式修改基本语法,我可能会添加我自己的命令,使之成为一个更强大的基本版本,但语法更简单。我想制作一种语言,我可以为其编写编译器(或修改现有的编译器),并将Qbasic语法应用到我的语言中。你似乎一次问了两个问题——这就像试图同时解决两个问题而不是单独解决它们一样致命。你是在问如何为编程语言编写编译器吗?关于这个话题有几个问题,除非你有一个具体问题没有涉及到,否则这个问题是重复的。或者你(2)是在征求关于QBasic语法的想法吗?这是一个很大的主题,但不涉及太多(至少是大多数人认为的)数学。非常感谢你给出了这个彻底的答案。关于你的回答,我有几个问题。解析是什么意思?像BASIC这样的语言属于哪一类呢?几句话:(1)不,它不是数学,而是高度抽象的东西,是的。(2) JavaScript永远不会被解释(大多数实现甚至现在JIT编译)。现在,没有一种严肃的语言能够单独解释源代码,甚至不能直接解释AST(较旧的Ruby实现可以解释源代码,使用compiletime元编程的语言也可以直接解释源代码)。(3) (E)了解BNF是很有用的,但是DSLs解析器生成器使用的不是不同就是完全不相关,所以这不是最重要的事情。更不用说这只是语法,你仍然需要构建一个AST并使其运行。解析是获取一系列“标记”(通常是一种语言的单词、符号等)并找出该序列在逻辑上代表什么的过程。在计算机语言中,解析是指编译器将源代码分解成各个部分,然后分析这些部分的含义。@delnan:我想你是对的。我已经有7年左右没有研究过这方面的东西了,所以我想我可能还没有达到目前的水平。