【发布时间】:2014-11-24 10:35:41
【问题描述】:
我正在写一个JavaCC-based parser for JavaScript (ECMAScript 5.1) 并且有一个带有正则表达式的有趣的极端情况。在这里。
考虑以下语句:
{}/a/g
我的问题:从规范的角度来看,是否应该解释为
-
ObjectLiteral除以Identifier a除以Identifier b或 -
Block后跟RegularExpressionLiteral /a/g?
例如,Chrome 将其解释为后者以及其他解析器。
从规范的角度看,{}/a/g 中的/a/g 是正则表达式还是除法?
这是我认为是规范的relevant part:
没有句法文法上下文,其中两个前导 或除法分配,以及前导的正则表达式文字是 允许。
在relevant question 上引用another answer:
除法运算符必须跟在表达式后面,而正则 表达式文字不能跟随表达式,所以在所有其他情况下 您可以放心地假设您正在查看正则表达式文字。
我的理解是{}是一个表达式。 ObjectLiteral,即使是空的也是PrimaryExpression。所以下面的/a/g 一定是除法,而不是正则表达式字面量。
还是我错了?
【问题讨论】:
-
是什么让您认为 {} 是一个表达式,或者这只是一个语句?左大括号通常被解释为块的开始。
标签: javascript regex grammar language-lawyer ecmascript-5