![](/img/trans.png)
[英]LOOKAHEADs for the JavaScript/ECMAScript array literal production
[英]How to simplify JavaScript/ECMAScript array literal production?
我目前使用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 ? "]"
我的第一个问题:这次重写正确吗?
其他两个问题:
是的,可以正确捕获所呈现的语法。
但是,更好的重写方法是:
"[" AssignmentExpression ? ( "," AssignmentExpression ? ) * "]"
因为在OP中的重写不是LL(1)-您无法在不阅读整个AssignmentExpression
情况下区分各种可能性-而通过此重写,您可以通过查看第一个令牌来找出使用哪种替代方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.