ANTLR4 Javascript 解析器正则表达式和除法运算符冲突

ANTLR4 Javascript parser RegExp and division operator conflict

我正在使用 antlr4 编写一个 JS 解析器。我基本上是使用 Antlr 的语法库 (ECMAScript.g4) 上发布的语法文件作为基础。

语法定义正则表达式规则如下,本身没有问题。

RegularExpressionLiteral: '/' RegularExpressionBody '/' RegularExpressionFlags ;

但是,解析器认为像这样的表达式代码是正则表达式。

var x = a / b + c / d;

我想知道是否有解决此冲突的简单方法。谢谢!

您可能没有包含语法中的所有代码。请务必将所有代码包含在 @member 块中:它们负责确定 / 是否应被视为除法运算符或正则表达式定界符。

当我运行下面的测试class:

public class Main {

    public static void main(String[] args) throws Exception {
        ECMAScriptLexer lexer = new ECMAScriptLexer(new ANTLRInputStream("var x = a / b + c / d;"));
        ECMAScriptParser parser = new ECMAScriptParser(new CommonTokenStream(lexer));
        ECMAScriptParser.ProgramContext ctx = parser.program();
        new TreeViewer(Arrays.asList(ECMAScriptParser.ruleNames), ctx).open();
    }
}

显示以下屏幕: