我不知道这是否是这个问题的正确的SE网站,如果没有,我会感谢任何能指出我正确方向的人。
对于我的大学项目(英国大学〜高中),我想设计一种基本的编程语言。它不具备所有必要的功能,但足以在控制台上编写一些基本程序。我想把它解释为我听说过编译语言非常复杂;面向对象,因为我只懂VB.NET,对OOP最熟悉;我的目标是创建一种易于非程序员学习的简单语言。
我一直在四处寻找,但很难找到有用的资源来解释有关创建编程语言的详细信息。我真的很感激你可以建议的任何在线资源 - 它们必须是免费的 - 如果有类似我错过的StackOverflow问题,深入的在线文章或教程,免费在线教科书的摘录......你认为可能有用的任何东西
答案 0 :(得分:5)
只看SICP - 本书将向您介绍编程和编程语言的原理,在最后两章中,它将教您如何为{{{{{{{{ 3}}编程语言 - 用Scheme编写。
我可以向你保证,书中的内容将会深刻地改变你对计算的看法。与Scheme IDE配合使用,您将拥有一个很好的环境,可以从第一原理开始学习如何创建自己的编程语言。
另一本推荐的书籍是DrRacket,虽然其中涉及的材料有点先进。它还将向您展示如何在Scheme中实现功能丰富的语言,这次包括类型语言和OOP语言。
答案 1 :(得分:2)
Aho-Ulman有一本关于编译器的优秀(并且非常深入)的书。 http://www.amazon.com/Compilers-Principles-Techniques-Alfred-Aho/dp/0201100886
但是,如果你想要一个编写简单编译器的快速方法,它可能太深了。不过,将它作为参考可能是件好事。
答案 2 :(得分:1)
如果您需要帮助解析语言本身,请查找解析器和词法分析器生成器。
传统的Linux工具lex和yacc是一个不错的选择。 Linux有野牛和flex,这是他们的Linux变体。
如果语言足够简单,可能没有必要。
我不知道有什么好的参考资料。也许这个解释器需要的东西列表会有所帮助:
有关使用bison的简单示例程序,请参阅http://dinosaur.compilertools.net/bison/bison_5.html,该程序解析并执行基本计算器的功能。以下是该页面示例的副本:
input: /* empty */
| input line
;
line: '\n'
| exp '\n' { printf ("\t%.10g\n", $1); }
;
exp: NUM { $$ = $1; }
| exp exp '+' { $$ = $1 + $2; }
| exp exp '-' { $$ = $1 - $2; }
| exp exp '*' { $$ = $1 * $2; }
| exp exp '/' { $$ = $1 / $2; }
/* Exponentiation */
| exp exp '^' { $$ = pow ($1, $2); }
/* Unary minus */
| exp 'n' { $$ = -$1; }
;
%%