这篇文章在
how browsers work上解释了CSS是如何上下文的,而HTML则不是.但JavaScript如何呢,JavaScript上下文是否自由?
我正在学习CFG和正式的证明,但距离了解如何解决这个问题还有很长的路要走.有人知道JavaScript是否是上下文无关的?
解决方法
不,JavaScript不是一个无上下文的语言.
它非常接近于一个,ECMAScript 5规范确实是use a context-free grammar1来描述语言的语法(您可以在Annex A中找到所有的产品).
当然,它确实对纯上下文的语法生成做了一些扩展,并且描述了解析器的额外行为.一个特别的事情是lookahead的使用,它仍然产生一个无上下文的语言,但如果不能用于某些规则,会使语法复杂化.不允许某些事情出现在严格的模式代码中是类似的 – 它可以通过调整语法(具有更多的制作)来完成,但是通过离开BNF可以更容易地表达规则.
然而,还有一些规则使语言不会上下文.您将在description of early errors中找到一个概述,可以使程序代码无效.该对象字面值不能包含重复的属性名称,并且该函数参数列表不能包含重复的标识符是不能使用(有限)上下文无关语法表达的两个规则.
我的直觉告诉我,the automatic semicolon insertion在同一个盒子里,但我认为它的规则太复杂了,甚至不能在这里尝试证明.
1:实际上它使用两个语法,一个lexical和一个syntactical,其中第一个在分割表达式和正则表达式之间消除歧义,并且产生作为第二语法的输入的令牌.2:与其他编程语言相比,实际上相当少