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

如何简化JavaScript/ECMAScript数组文字的生成?,javascript,parsing,grammar,ecmascript-5,javacc,Javascript,Parsing,Grammar,Ecmascript 5,Javacc,我目前正在用JavaCC实现一个JavaScript/解析器,但在生产过程中遇到了问题 ArrayLiteral : [ Elision_opt ] [ ElementList ] [ ElementList , Elision_opt ] ElementList : Elision_opt AssignmentExpression ElementList , Elision_opt AssignmentExpression Elision :

我目前正在用JavaCC实现一个JavaScript/解析器,但在生产过程中遇到了问题

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

ElementList :
    Elision_opt AssignmentExpression
    ElementList , Elision_opt AssignmentExpression

Elision :
    ,
    Elision ,
我有三个问题,我会逐一提问


我试图简化/重写上面描述的
ArrayLiteral
产品,并最终实现了以下产品(伪语法):

我的第一个问题:这种重写正确吗?

另外两项任务:


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

但是,更好的重写方法是:

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

因为OP中的重写不是LL(1)——如果不阅读整个
AssignmentExpression
,您就无法区分可能性,而使用此函数,您只需查看第一个标记即可确定使用哪种替代方法。

这很好,我想我会选择它。尽管带有否定的
LOOKAHEAD
的问题仍然很有趣(我在其他一些地方需要它)。
"[" AssignmentExpression ? ( "," AssignmentExpression ? ) * "]"