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();
}
}
显示以下屏幕:
我正在使用 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();
}
}
显示以下屏幕: