这篇关于浏览器的工作方式的文章解释了CSS如何是上下文自由的,而HTML则不是。但是JavaScript呢,JavaScript上下文是免费的吗?
我正在学习CFG和正式证明,但离理解如何解决这个问题还有很长的路要走。有人知道JavaScript是否是上下文无关的吗?
发布于 2015-06-07 19:27:55
我很确定JS并不是上下文无关的--考虑到任意的代码伪像,您不可能在不知道上下文的情况下确定它的确切含义。
想到的第一个例子是{} --它是表示空对象文本还是空语句块?没有上下文是不可能决定的,但是由于语言允许从以'}‘结尾的语句中省略分号(就像大多数C类语法语言一样),它也可能在上下文中无法判断!考虑{x: {}} -这可能是一个包含空对象的"x“字段的对象文本,或者一个带有标签子语句的语句块(其中标签是'x‘,子语句是{})。也许语言规范在这样的场景中有一些选择正确解释的规则,但无论如何,仅从这些例子来看,语言似乎并不是没有上下文的。
JavaScript的“自动分号插入”功能肯定无助于区分表达式和语句。
下面是另一个需要考虑的问题:function x() {} --这是做什么的?如果它是一个语句,它将声明一个新的悬挂变量'x‘,这个函数作为它的值。如果它是一个表达式,它简单地计算为一个函数,它的上值'x‘绑定到同一个函数(用于自引用)。
https://stackoverflow.com/questions/30697267
复制相似问题