如何简化JavaScript / ECMAScript数组文字生成?

时间:2014-11-13 12:03:26

标签: javascript parsing grammar ecmascript-5 javacc

我目前正在使用JavaCC实现JavaScript / ECMAScript 5.1解析器,并且ArrayLiteral生产出现问题。

ArrayLiteral :
    [ Elision_opt ]
    [ ElementList ]
    [ ElementList , Elision_opt ]

ElementList :
    Elision_opt AssignmentExpression
    ElementList , Elision_opt AssignmentExpression

Elision :
    ,
    Elision ,

我有三个问题,我会逐一问他们。


我试图简化/重写上面描述的ArrayLiteral制作,最后到达下面的制作(伪语法):

ArrayLiteral:
    "[" ("," | AssignmentExpression ",") * AssignmentExpression ? "]"

我的第一个问题:重写是否正确?

另外两个请求:

1 个答案:

答案 0 :(得分:1)

是的,这正确地捕获了所呈现的语法。

然而,更好的重写将是:

"[" AssignmentExpression ? ( "," AssignmentExpression ? ) * "]"

因为OP中的重写不是LL(1) - 你无法在不阅读整个AssignmentExpression的情况下区分这些可能性 - 而使用这一个你可以通过查看第一个令牌。