JavaScript语法:for/for-in循环规则?
问题描述:
我在写一个JavaScript解析器,但for
循环的语法规则有点混乱。 From the specs:JavaScript语法:for/for-in循环规则?
'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
运营商。
我说得对吗,还是我感到困惑?
答
你是对的。我觉得你很困惑,因为ANTLR语法的拼写错误。对于“否”,应该是variableDeclarationListNoIn
。 ANTLR使用小写l
来代替Noln
,而不是大写I
。
从表达式中删除in
对于避免for
语句中in
的特殊用法不明确是很重要的。
顺便说一句,你的问题意味着你给的链接是规范。不是这样。它是一个示例ANTLR语法的链接。官方标配可以在这里找到:http://www.ecma-international.org/publications/standards/Ecma-262.htm
答
我想象每一行代表以下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