如何为您要从头开始设计的新编程语言(命令式编程语言)定义语法(无上下文)。
换句话说:当您想从头开始创建一种新的编程语言时,您将如何进行。
如何为您要从头开始设计的新编程语言(命令式编程语言)定义语法(无上下文)。
换句话说:当您想从头开始创建一种新的编程语言时,您将如何进行。
一步一步来。
不认真,从表达式和运算符开始,向上到语句,然后到函数/类等。保留一个标点符号用于什么的列表。
并行定义用于引用变量、数组、哈希、数字文字、字符串文字、其他内置文字的语法。同时定义您的数据命名模型和范围规则。
要检查您的语法是否有意义,请关注一个级别(文字/变量、运算符、表达式、语句、函数等),并确保其他级别的标点符号和标记散布或附加/前置不会引起歧义。
最后把它全部写在 EBNF 中并通过 ANTLR 或类似的方法运行它。
也最好不要重新发明轮子。我通常从选择开始和结束语句块和函数的序列以及数学运算符开始,这些运算符通常基本上类似于 C、类似于 ECMAScript、类似于 Basic、基于命令列表或基于 XML。这很有帮助,因为这是人们习惯使用的。
当然,你必须想出一个非常有说服力的理由,不要放弃编写一门新语言,而只坚持使用经过良好测试和广泛使用的 C、ECMAScript 或 Basic。
我经常开始定义新语言只是为了发现其他人已经在某个现有语言的某个地方实现了一个功能。
If your goal is speed of development for some specific project, you might be better off prototyping in something like Python, Lua or SpiderMonkey if you're looking to get up and running quickly and want to reduce the amount of typing necessary in most compiled languages.
你会想看看 EBNF(扩展巴科斯-瑙尔形式)。
(假设你想写一个上下文无关的语法,也就是说。)
如果您的意思是定义语法,最好从现有语言开始并修改其语法以匹配您所追求的语言。创建语法规范是一项相当机械的练习,在您自己的脑海中使用一组模式。例如,if 语句是什么样的?看起来像C吗
if <- if(exp) block
if <- if(exp) block else block2
还是喜欢机器学习?
if <- if exp then block else block end
或者也许你想使用像 Lua 这样的 elseif:
if <- if exp then exp end
if <- if exp then exp (elseif exp)* else exp end
语法和语义编码了这些决定。请注意,这些都不太适合在 LALR 或 LL(*) 编译器生成器中实现,并且由于它们是模棱两可的,因此必须对实现进行按摩。
Michael Scott 的 Programming Language Pragmatics 很好地介绍了编程语言的设计。它可以在亚马逊上找到
看看Bison,也许这就是你要找的东西?
在开始设计一种编程语言之前,您需要了解很多关于编程语言的知识。我推荐Shriram Krishnamurthi 的 Programming Languages: Application and Interpretation。