【问题标题】:ANTLR4 Javascript parser RegExp and division operator conflictANTLR4 Javascript 解析器 RegExp 和除法运算符冲突
【发布时间】:2016-06-03 03:15:42
【问题描述】:

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

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

RegularExpressionLiteral: '/' RegularExpressionBody '/' RegularExpressionFlags ;

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

var x = a / b + c / d;

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

【问题讨论】:

    标签: javascript regex parsing antlr4


    【解决方案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();
        }
    }
    

    显示以下屏幕:

    【讨论】:

    • 哇,你是语法的贡献者之一。我感谢你的评论。好吧,我从@memeber 部分删除了 java 代码,因为我的目标语言是 Javascript。我完全忘记了我所做的!我需要一个在 Javascript 环境中运行的 Javascript 解析器。我打算用JS重写代码。谢谢巴特。
    猜你喜欢
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2016-02-17
    相关资源
    最近更新 更多