BNF中的JavaScript for循环

时间:2009-05-01 14:32:25

标签: javascript parsing bnf

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

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

正如您所看到的,示例中有两个语句,变量声明和for循环。有许多不同的表达式,但表达式的 none 也是语句。

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

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

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

您对如何解决此问题有何看法?我可以想到几个方面,但我不想妨碍你自己的想法,所以我不会在这里提到它们。

2 个答案:

答案 0 :(得分:1)

网上有几个例子,ANTLR ECMAScript grammar 你可以找到这个结构:

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
    )
;

答案 1 :(得分:0)

你应该可以在那里放任何“简单”语句(即vardecl,expression,void function call等)。简单来说,我指的是任何不是复合语句的东西(即带有额外的大括号,例如if / else / for / function等)。