4

我不知道这是否是解决这个问题的正确 SE 网站,如果不是,我将不胜感激任何能指出我正确方向的人。

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

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

4

3 回答 3

5

看看SICP就知道了——这本书将启发你了解编程和编程语言的原理,在最后两章中,它将教你如何为Scheme编程语言构建解释器和编译器——用 Scheme 编写。

我可以向你保证,书中的内容将深刻地改变你对计算的看法。与DrRacket IDE 相结合,您将拥有一个很好的环境来学习如何从基本原理开始创建自己的编程语言。

另一本推荐的书是Essentials of Programming Languages,尽管其中涵盖的材料更高级一些。它还将向您展示如何在 Scheme 中实现功能丰富的语言,这次包括类型语言和 OOP 语言。

于 2013-08-22T19:47:46.473 回答
2

Aho-Ulman 有一本关于编译器的优秀(而且非常深入)的书。 http://www.amazon.com/Compilers-Principles-Techniques-Alfred-Aho/dp/0201100886

但是,如果您想要快速编写一个简单的编译器,它可能太深了。不过,将其作为参考可能会很好。

于 2013-08-22T19:56:52.853 回答
1

如果您需要帮助解析语言本身,请寻找解析器和词法分析器生成器。

传统的 Linux 工具 lex 和 yacc 是不错的选择。Linux 有 bison 和 flex,它们是它们的 Linux 变体。

如果语言足够简单,它们可能不是必需的。

我不知道有什么好的参考资料。也许这个口译员需要的东西清单会有所帮助:

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

请参阅http://dinosaur.compilertools.net/bison/bison_5.html以获取使用 bison 的简单示例程序,该程序解析和执行基本计算器的功能。这是该页面中示例的副本:

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;        }
;
%%
于 2013-08-22T19:53:48.483 回答