繁体   English   中英

BNF中的JavaScript for循环

[英]JavaScript for-loop in BNF

我正在为JavaScript编写BNF,它将用于生成该语言的词法分析器和解析器。 但是,我想要一些有关如何设计for循环的想法。 这是我当前BNF的简化版本:

[...]
VarDecl. Statement ::= "var" Identifier "=" Expr ";"
ForLoop. Statement ::= "for" "(" Expr ";" Expr ";" Expr ")"
[...]

如您所见,示例中有两个语句,变量声明和for循环。 有很多不同的表达式,但是这些表达式都不是语句。

现在的问题是此JavaScript代码不会通过解析器:

for (var x = 3; [...]; [...])

这是因为变量声明不是表达式。

您如何解决此问题的想法是什么? 我可以考虑几种方法,但是我不想妨碍您自己的想法,因此在此不再赘述。

网络上有一些示例,在ANTLR ECMAScript语法中,您可以找到以下结构:

iterationStatement:
'do' statement 'while' LPAREN expression RPAREN SEMI
| 'while' LPAREN expression RPAREN statement
| '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
    )
;

您应该能够在此处放置任何“简单”语句(即vardecl,表达式,void函数调用等)。 简单来说,我的意思是不是复合语句的任何内容(即带有大括号的附加内容,例如if / else / for / function等)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM