哪种编程语言在其正式规范中具有非常简短的无上下文文法?

12

哪种编程语言的EBNF文法简短优美?

有些语言更易于解析。以前我创建了一个简单的VHDL解析器,但它非常慢。这并不是因为它完全使用Python实现,而是因为VHDL的EBNF文法太大了。Python的EBNF文法很优美,但不是非常简短。

我建议像LISP这样的许多函数式编程语言拥有简短简单的文法,但我对像C或Bash这样更流行的简单命令式语言感兴趣。


2
真让人耳目一新!一个与Go无关的语言问题... 哥们,你真的不太“潮”啊 ;-) - mjv
1
brainf**k,http://www.muppetlabs.com/~breadbox/bf/ :) - Oren S
6个回答

5

好的,我很好奇所以我查了一下。就简单性而言,Lua在与Oberon和Component Pascal的比较中轻松胜出。 - Carl Smotricz
@ Carl Smotricz 请看一下我在我的答案下面的评论。=) - Wildcat
Lua BNF将一些功能(如运算符优先级)留给语义层处理。许多其他简单的语言(如Pascal、Modula、Oberon)将运算符优先级编码到语法中。 - Adrian McCarthy

4

汇编语言!

总的来说,特别是对于具有简单架构(少量指令、少量寻址模式、少量寄存器)的CPU而言,汇编语言的语法相对较短。

事实上,像可编程逻辑控制器中发现的这样的专用处理器可以具有甚至更简单的语法。但是,最简单的PLC本质上只是布尔方程计算器。


汇编语言的问题在于它的语法完全没有结构,只是一系列指令的列表。 - Jack
此外,@Jack,“语言”不仅限于操作码和EA表达式 - 它还需要包括由汇编器本身定义的宏、符号、指令等。一旦我们考虑到这一点,通常就会得到一个相当混乱的语法。 - MikeB

3

这看起来很熟悉。它似乎与Modula-2密切相关,而Modula-2本身是Pascal的直接后代。 - wallyk
Lua的BNF更好。 - psihodelia
2
@psihodelia,我不想引发战争,但需要澄清一些事情: 1)Oberon-2语法中有大约30个EBNF规则,而Lua则有大约20个规则。更好吗?我应该说是相当的。强类型和直接支持面向对象编程是Oberon中额外10个规则的来源。 2)Lua不是命令式语言。它是多范式的。而你说你“对简单的命令式语言感兴趣”。 - Wildcat

1

Pascal只有2-3页的BNF符号说明


1
46条规则,3页,省略GOTO。http://www.docstoc.com/docs/36767423/Context-free-Grammar-for-Standard-Pascal - Radek

0

GL Shading language 怎么样? 语言规范 (PDF)

然而,对于这些爱好,我总是更喜欢自己实现已知语言的子集,而不选择任何“预制品”...


添加一个指针,指向PDF文件,这样会更好。 - simon
(1) 你的浏览器状态栏可能会提示你,你只需要强制检查 - 这也是一个很好的反病毒建议。 (2) 我也讨厌PDF。忘记塔利班,核平Adobe吧!(开玩笑!!) - Carl Smotricz

-1

Lisp可能非常小。

lisp ::= `(´ exp `)´

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接