如何为您想要从头设计的新编程语言(命令式编程语言)定义语法(无上下文)。
换句话说:当您想从头开始创建新的编程语言时,如何继续。
答案 0 :(得分:26)
一次一步。
不重要的是,从表达式和运算符开始,向上处理语句,然后到函数/类等。保留一个标点符号用于什么。
并行定义语法,用于引用变量,数组,哈希,数字文字,字符串文字,其他内置文字。同时并行定义数据命名模型和范围规则。
检查你的语法是否有意义集中在某个级别(文字/变量,运算符,表达式,语句,函数等),并确保散布或附加/前置的其他级别的标点和标记不会导致歧义。
最后在EBNF中全部写出来并通过ANTLR或类似方式运行它。
最好不要重新发明轮子。我通常首先选择序列来启动和结束语句块和函数,以及数学运算符,它们通常基本上类似C语言,类似ECMAScript,类似于Basic,基于命令列表或基于XML。这对人们习惯的工作有很大帮助。
当然,你必须提出一个非常令人信服的理由,不要放弃编写新语言,只需坚持使用经过充分测试和使用的C,ECMAScript或Basic。
我经常开始定义新语言,但发现其他人已经在现有语言的某处实现了某项功能。
如果您的目标是针对某些特定项目的开发速度,那么如果您希望快速启动并运行并希望减少所需的键入量,则可能会更好地使用Python,Lua或SpiderMonkey等原型。大多数编译语言。
答案 1 :(得分:9)
您需要查看EBNF(Extended Backus-Naur Form)。
(假设你想写一个无上下文语法,那就是。)
答案 2 :(得分:5)
你需要购买这两本书Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages (Pragmatic Programmers)和The Definitive Antlr Reference: Building Domain-Specific Languages (Pragmatic Programmers)他们拥有你开始创建自己的语言,解析器,翻译,翻译和/或编译器所需的一切
答案 3 :(得分:2)
如果您的意思是定义一个语法,那么最好通过从现有语言开始并修改其语法来匹配您所使用的语法。创建语法规范是一种相当机械的练习,在你自己的头脑中使用一组模式。例如,if语句是什么样的?它看起来像C
if <- if(exp) block
if <- if(exp) block else block2
或像ML?
if <- if exp then block else block end
或者你想使用像Lua这样的其他人:
if <- if exp then exp end
if <- if exp then exp (elseif exp)* else exp end
语法和语义将这些决定编成法典。请注意,这些都不适合在LALR或LL(*)编译器生成器中实现,并且必须按摩以实现,因为它们不明确。
编程语言迈克尔·斯科特的语用学是对编程语言设计的一个很好的介绍。它可以在亚马逊here
上找到答案 4 :(得分:1)
看看Bison,也许这就是你要找的东西?
答案 5 :(得分:1)
在开始设计语言之前,您需要了解很多关于编程语言的知识。我推荐Programming Languages: Application and Interpretation by Shriram Krishnamurthi。