编译器构造 – 如何为编程语言定义语法

如何为要从头开始设计的新编程语言(命令式编程语言)定义语法(无上下文)。

换句话说:当您要从头开始创建新的编程语言时,如何继续。

一步一步来。

没有认真的,从表达式和运算符开始,向上运行语句,然后到函数/类等。保持什么标点符号的列表。

并行定义用于引用变量,数组,散列,数字文字,字符串文字,其他内置文字的语法。同时并行定义您的数据命名模型和范围规则。

要检查您的语法是否有意义上集中在一个层次(文字/变量,操作符,表达式,语句,功能等)上,并确保散布或附加/附加的其他级别的标点符号和令牌不会引起歧义。

最后将其全部写在EBNF中,并通过ANTLR或类似的方式运行。

最好不要重新发明车轮。我通常选择序列来启动和结束语句块和函数,以及数学运算符,通常基本上是类似C ++,类似于ECMAScript的类,基于类,基于命令列表或基于XML的。这有助于很多cos这是人们习惯使用的东西。

当然,你必须提出一个非常引人注目的理由,不要放弃写一种新的语言,只要坚持使用C,ECMAScript或Basic,这些都经过很好的测试和使用。

我经常开始定义新语言,只能找到其他人已经在某种现有语言中实现某项功能。

如果您的目标是针对某些具体项目的开发速度,您可能会更喜欢Python,Lua或SpiderMonkey中的原型设计,如果您希望快速启动并运行,并希望减少大多数编译语言所需的打字数量。

翻译自:https://stackoverflow.com/questions/2320402/how-to-define-a-grammar-for-a-programming-language

转载注明原文:编译器构造 – 如何为编程语言定义语法