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

时间:2015-07-08 14:51:51

标签: javascript antlr antlr4

我正在尝试适应JS目标Expr.g4 of the book。 在此示例中,操作直接在语法中。它们包括在@parser :: members中定义的实用程序函数,它们在规则中被调用。

该示例在Java中运行良好,但在其JS翻译中我有2个问题: - 通过操作规则显示操作功能 - 在功能中识别令牌。

我终于设法得到这个有效的表述:

@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生成的类) 我很确定有更简洁的方法可以做到这一点,不是吗?

1 个答案:

答案 0 :(得分:0)

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