我正在使用antlr4编写JS解析器。我基本上使用Antlr的语法库(ECMAScript.g4)上发布的语法文件作为基础。
语法定义了如下的正则表达式规则,这本身不是问题。
RegularExpressionLiteral:
'/' RegularExpressionBody '/' RegularExpressionFlags
;
但是,解析器认为像这样的表达式代码是正则表达式。
var x = a / b + c / d;
我想知道这场冲突是否有一个简单的解决办法。谢谢!
答案 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();
}
}
显示以下屏幕: