ANTLR4 Javascript解析器RegExp和除法运算符冲突

时间:2016-06-03 03:15:43

标签: javascript regex parsing antlr4

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

语法定义了如下的正则表达式规则,这本身不是问题。

RegularExpressionLiteral: '/' RegularExpressionBody '/' RegularExpressionFlags ;

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

var x = a / b + c / d;

我想知道这场冲突是否有一个简单的解决办法。谢谢!

1 个答案:

答案 0 :(得分:1)

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

当我运行以下测试类时:

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();
    }
}

显示以下屏幕:

enter image description here