Antlr4-JS 语法中的操作:如何访问令牌和定义函数? (直接在java中,而不是在JS中)

2024-02-25

我正在努力适应 JS 目标本书的Expr.g4 https://pragprog.com/titles/tpantlr2/source_code.
在这个例子中,动作直接在语法中。它们包括 @parser::members 中定义的实用函数,这些函数在规则中调用。

该示例在 Java 中运行良好,但在其 JS 翻译中我有两个问题:

  • 使操作函数通过操作规则可见
  • 获取函数中识别的标记。

我终于得到了这个工作公式:

@parser::members {
 
  myeval =  function(left, op, right) {
        switch ( op ) {
            case Expr_jsParser.MUL : return left * right;
            case Expr_jsParser.DIV : return left / right;
            case Expr_jsParser.ADD : return left + right;
            case Expr_jsParser.SUB : return left - right;
        }
        return 0;
    };
}

(myeval是动作函数。MUL、DIV等是语法标记。Expr_jsParser是Antlr生成的类)
我很确定有一种更干净的方法可以做到这一点,不是吗?


Eric Vergnaud(Antlr 的 JS 人员)告诉我这是正常行为。简单地说,Java 接受跳过Expr_jsParser前缀,而 JS 没有。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Antlr4-JS 语法中的操作:如何访问令牌和定义函数? (直接在java中,而不是在JS中) 的相关文章

随机推荐