【问题标题】:ANTLR4 integer parsing failANTLR4 整数解析失败
【发布时间】:2013-02-22 14:33:55
【问题描述】:

我正在尝试使用 antlr 4 解析文件,但我不明白为什么不解析多于一位的整数 (第 79:44 行在输入“17”处没有可行的替代方案)。

这是整个语法http://pastebin.com/rxktvUBi

这里是int的定义

fragment DIGIT : [0-9] ;
integer : DIGIT+ ;

这根本不起作用。这个版本

integer : ('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9')+ ;

仅适用于 1 位整数。

这是一个未解析行的示例

 struct p_77_bound_17_or: ((bound(MEK)<=17) | (bound(MEKPP)<=17))

问题出在

 simple_expression:

     (integer)+

请注意,如果我使用标识符

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


identifier: ID;

而不是整数

 simple_expression:

     identifier

行得通。

为什么?有什么想法吗?

【问题讨论】:

    标签: parsing integer parser-generator antlr4


    【解决方案1】:

    您的integer 规则是解析器规则,而不是词法分析器规则。它引用的@​​987654322@、'1' 等文字被隐式转换为词法分析器规则,每个规则都匹配一个数字。您应该改为使用以下词法分析器规则:

    INTEGER : '0'..'9'+;
    

    或者在 ANTLR 4 中,就是这样:

    INTEGER : [0-9]+;
    

    【讨论】:

      猜你喜欢
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 2020-10-19
      • 1970-01-01
      相关资源
      最近更新 更多