【问题标题】:Get sub tokens from tokens in ANTLR4 in Java在 Java 中从 ANTLR4 中的令牌中获取子令牌
【发布时间】:2018-08-03 08:12:10
【问题描述】:

我的语法是:

//parser
expression : SYNTAX;

//lexer
FIELD : [A-Za-z]+;
SYNTAX : '${'FIELD'}'

我想从作为输入传递的字符串中提取 FIELD。例如,当我将 ${Test String} 作为输入传递时,我得到一个标记“${Test String}”,我想从中提取“测试字符串”,即 FIELD 标记。我不想按照here 的建议更改我的语法。我是否也可以避免使用正则表达式来提取“测试字符串”。 antlr4 是否支持提取子令牌?

【问题讨论】:

    标签: java regex antlr antlr4


    【解决方案1】:

    在 ANTLR 中没有像子令牌这样的东西。在您的 SYNTAX 规则中,FIELD 规则用作 fragment - 本质上只是一个要在该位置扩展的宏。你的语法和

    没有区别
    //parser
    expression : SYNTAX;
    
    //lexer
    FIELD : [A-Za-z]+;
    SYNTAX : '${'[A-Za-z]+'}'
    

    两者都产生完全相同的解析和词法分析器。

    如果您不愿意将其设为解析器规则,则必须自己提取(正则表达式或其他方式)。

    【讨论】:

      猜你喜欢
      • 2023-02-05
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 2021-08-19
      相关资源
      最近更新 更多