【问题标题】:How to simplify JavaScript/ECMAScript array literal production?如何简化 JavaScript/ECMAScript 数组文字生成?
【发布时间】:2014-11-13 12:03:26
【问题描述】:

我目前使用 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 ? "]"

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

另外两个问题:

【问题讨论】:

    标签: javascript parsing grammar ecmascript-5 javacc


    【解决方案1】:

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

    但是,更好的重写是:

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

    因为 OP 中的重写不是 LL(1) - 如果不阅读整个 AssignmentExpression,您将无法区分可能性 - 而有了这个,您只需查看第一个标记即可确定使用哪种替代方案.

    【讨论】:

    • 这很好,我想我会去的。尽管带有否定LOOKAHEAD 的问题仍然很有趣(我在其他几个地方需要它)。
    猜你喜欢
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多