ECMAScript的EBNF语法是什么?

22

我试图找到一份好的ECMAScript的EBNF描述,但迄今为止我还没有找到完整的东西。

有什么想法吗?

4个回答

16

关于ECMAScript标准,它是否完全符合定义呢? :-}

编辑:如果你需要一个现有的语法,可以尝试其中一个语法生成器工具网站。 对于ANTLR,这里是ECMAScript语法。我不了解它的质量,但如果语法构建得当,ANTLR可以生成良好的解析器。你可能还会发现语法与一堆ANTLR内容交织在一起,因此从你的角度来看,它可能会遭受与标准相同的问题。至少你可以把所有这些东西都删除掉。


3
或许很精确,但这是一份PDF文档,语法片段分散在整个文件中,使用黑体字表示字面标记。这意味着自动或手动从中提取完整的EBNF将非常麻烦且耗时。 - Peter Boughton
是的,因为ANTLR实际上是一种语法,所以我应该能够创建一个脚本来转换它。稍后会尝试一下,看看能做到什么程度。(我对ANTLR本身并不太熟悉,所以我正在尝试使用其他各种工具来看看我更喜欢哪个)。 - Peter Boughton
2
欢迎来到开源世界。你实际上想做什么? - Ira Baxter
@PeterBoughton:2012年9月:偶然发现了这个旧答案。更新:关于跨平台:DMS可以在Windows上运行,并且在Linux和MacOS下的Wine上表现良好,我个人认为非常不错。 - Ira Baxter
1
脚本链接已失效(2014年3月),新链接为http://www.antlr3.org/grammar/1153976512034/ecmascriptA3.g。 - CarlH
显示剩余8条评论

9

1
Tom Copeland的这个不完整(没有令牌或终端)-它是从JavaCC脚本生成的,即使我尝试使用原始脚本,我仍然会遇到错误。 至于dherman/ClassicJavascript链接的另一个,我一点头绪都没有? :S - Peter Boughton
是的。我只是觉得没有人对脚本语言的EBNF很感兴趣。动态语言不适合递归下降编译。当你可以随时通过字符串构建函数时,传统编译器有什么用呢?加速JS的关键在于类似Forth的TILs、运行时对常见路径的分析、标记化等等。 - Nosredna
我对如何处理动态内容有一些模糊的想法,但到目前为止,我甚至还没有达到那个阶段!你能否解释一下“TILs”是什么(或提供链接)-我的搜索结果太多了,无法返回任何信息。 :( - Peter Boughton
线程化解释型语言(例如Forth语言)。你应该了解一下Python编译器。问题是你带来了多少运行时。微软的DLR也非常有趣。 - Nosredna

4

我正在为ECMAScript开发基于的解析器。这是目前我的语法:

参见 Tom Copeland 的 EcmaScript BNF:

除了“另一个JavaScript解释器”:

除了Dojo Toolkit的语法(可能基于YAJI): 从我的角度来看,YAJI或Dojo Toolkit是最好的、最完整的(据我所知)。我正在以它们为基础进行工作,但希望使其更加完整(5.1/6)和符合标准,同时又实用。
ECMAScript语法非常棘手。它有一些巨大的警告:
- 正则表达式字面量与除法(你不能在词法分析器层面上区分它们) - 自动插入分号(ASI)
因此请注意这一点。实现这些是非常棘手的。
如果你的目标平台是Java,而且你不介意使用JavaCC,我会很高兴你加入我的项目。我的语法实际上已经准备好了(可以编译而没有警告)。我现在正在编写测试套件,以覆盖每一个特性和产生物。虽然我预计在正则表达式字面量和ASI方面会遇到一些问题。
附注:我刚刚注意到这个问题是从09年开始的,所以我的邀请可能太晚了。 :)

1
不是的 - 我想要这个项目已经搁置了相当长的时间,但不幸的是我现在没有时间去恢复它,但我仍然有模糊的计划在某个时候这样做。我已经为将来有机会再次尝试而收藏了你的项目。谢谢 :) - Peter Boughton

2

请尝试此链接ecmascriptA3,其中包含ECMAScript的BNF。


链接已损坏:404。 - S Panfilov
确实。谷歌搜索显示它现在在GitHub上。编辑链接。 - zeacuss

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