创建基本的编程语言 - 资源?

时间:2013-08-22 19:41:56

标签: language-agnostic programming-languages

我不知道这是否是这个问题的正确的SE网站,如果没有,我会感谢任何能指出我正确方向的人。

对于我的大学项目(英国大学〜高中),我想设计一种基本的编程语言。它不具备所有必要的功能,但足以在控制台上编写一些基本程序。我想把它解释为我听说过编译语言非常复杂;面向对象,因为我只懂VB.NET,对OOP最熟悉;我的目标是创建一种易于非程序员学习的简单语言。

我一直在四处寻找,但很难找到有用的资源来解释有关创建编程语言的详细信息。我真的很感激你可以建议的任何在线资源 - 它们必须是免费的 - 如果有类似我错过的StackOverflow问题,深入的在线文章或教程,免费在线教科书的摘录......你认为可能有用的任何东西

3 个答案:

答案 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变体。

如果语言足够简单,可能没有必要。

我不知道有什么好的参考资料。也许这个解释器需要的东西列表会有所帮助:

  • 条件语句(例如“if”)
  • 分支声明(例如“goto”)
  • 变量存储和赋值语句
  • 至少一个简单的表达式评估器(例如,如果我想设置X = 1 + 1,则需要将X设置为2)
  • 输入和输出(例如读写语句或函数)

有关使用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;        }
;
%%