我正在编写JavaScript解析器,但for
循环的语法规则有点令人困惑。 From the specs:
'for' LPAREN (
(expressionNoln)? SEMI (expression)? SEMI (expression)? RPAREN statement
| 'var' variableDeclarationListNoln SEMI (expression)? SEMI (expression)? RPAREN statement
| leftHandSideExpression 'in' expression RPAREN statement
| 'var' variableDeclarationNoln 'in' expression RPAREN statement
)
我正在试图找出expressionNoln
与常规expression
之间的区别。并且,在此过程中,弄清楚variableDeclartionNoln
和variableDeclartionListNoln
发生了什么。
我发现的唯一区别是在relationalExpression
和relationalExpressionNoln
之间进一步向下。后一条规则缺少in
运算符。
我做对了,还是只是困惑?
答案 0 :(得分:1)
你是对的。我认为你很困惑,因为ANTLR语法的标识符拼写错误。对于“不在”,它应该是variableDeclarationListNoIn
。 ANTLR使用小写Noln
而不是大写l
拼写I
。
从表达式中删除in
非常重要,可避免在in
语句中特殊使用for
时出现歧义。
答案 1 :(得分:0)
我想每一行代表以下for
s:
for (i = 0; i < 10; i++) console.log(i);
for (var i = 0; i < 10; i++) console.log(i);
for (i in obj) console.log(i + ': ' + obj[i]);
for (var i in obj) console.log(i + ': ' + obj[i]);
我不确定No Line
(我想象它代表的是什么)意味着。
SEMI = ';' LPAREN = '(' RPAREN = ')' ? = optional | = or