javascript - Antlr4-JS actions in grammar : how to access tokens and define funcs ?(直接在java中,不在JS中)

标签 javascript antlr antlr4

我正在尝试适应 JS 目标 Expr.g4 of the book .
在这个例子中, Action 直接在语法中。它们包括在规则中调用的@parser::members 中定义的实用函数。

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

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

我终于设法得到了这个有效的公式:

@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是 Action 函数,MUL、DIV等是文法标记,Expr_jsParser是Antlr生成的类)
我很确定有一种更简洁的方法可以做到这一点,不是吗?

最佳答案

Eric Vergnaud(Antlr 的 JS 专家)告诉我这是常规行为。简单地说,Java 接受跳过 Expr_jsParser 前缀,而 JS 不接受。

关于javascript - Antlr4-JS actions in grammar : how to access tokens and define funcs ?(直接在java中,不在JS中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31296258/

相关文章:

Javascript函数在使用三元语句时返回undefined

javascript - 我自己在 matter.js 中的模型

parsing - 帮助解析日志文件 (ANTLR3)

java - ANTLR 中使用监听器的 if/else 语句

javascript - Mongo shell javascript 数组扩展

javascript - 圈子的入口动画

java - 分析代码以创建 UML 的最佳方法是什么?

whitespace - Antlr隐藏 channel 空白问题

java - ANTLR4:忽略输入中的空格但不忽略字符串文字中的空格

java - Eclipse:我正在使用 ANTLR4 插件,如何让 Eclipse 构建由 ANTLR4 插件创建的工件?