【问题标题】:Antlr4 instruction keywords and longest-statement matchingAntlr4指令关键字和最长语句匹配
【发布时间】:2020-04-07 21:59:38
【问题描述】:

我正在尝试编写语法,但我发现了一个问题,我不太确定如何“优雅地”解决。

问题是我将“bro”作为保留的指令关键字,它可以跟(或不跟)谓词语句。 IE:“bro_t”或“bro”。

现在,问题是当前 'bro_t' 与 ID 的定义匹配,而 'bro' 本身就是一个标记,显然 'bro_t' 比 'bro' 长,因此解析器将该语句与 ID 匹配并且解析失败。我提出的解决方案是同时保留“bro_t”和“bro_f”,但这对于整个指令集来说相对耗时。我正在研究的另一个解决方案是通配符运算符,但我真的不明白它们是否适用于此以及如何应用它们。

语法:

predicate
        : '_t' '<' register '>' | '_f' '<' register '>' | ;

operation
    : 'bro' predicate ;

ID: ('a' .. 'z' | 'A' .. 'Z' | '_') ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' | '.')* ;

【问题讨论】:

    标签: antlr antlr4 lexer


    【解决方案1】:

    为什么不这样做:

    operation
     : BRO '<' register '>'
     ;
    
    BRO : 'bro' ( '_' [a-z]+ )?
    ID  : [a-zA-Z_] [a-zA-Z0-9_$.]*;
    

    ?

    【讨论】:

      猜你喜欢
      • 2018-09-27
      • 2022-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多