如何简化JavaScript/ECMAScript数组文字的生成?
我目前正在用JavaCC实现一个JavaScript/解析器,但在生产过程中遇到了问题如何简化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 :
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 ? ) * "]"