【问题标题】:only char 'a' cannot be recognized in ANTLR grammar在 ANTLR 语法中只能识别 char 'a'
【发布时间】:2012-12-12 00:20:50
【问题描述】:

身份识别:

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

当我解析我的规则时,只有 char 'a' 无法识别,但 'A' 或 'aa' 或 'a0' 或 'b' 或 'c' 或 'AAAZzzzxx' 或 .... 其他一切在宇宙中,除了“a”之外,词法分析器为什么不能识别“a”?

错误:

mismatched input 'a' expecting 'u0005'

谢谢!

【问题讨论】:

  • 您的解析器语法是否在任何地方明确引用'a'?如果是这样,ANTLR 会在ID 有机会看到它之前悄悄地生成一个与'a' 匹配的新词法分析器规则。如果您可以将语法的那部分添加到问题中(假设它存在,这只是一个猜测),那么有人可以帮助您解决问题。
  • A:'a';我找到了这个混蛋......谢谢,它很简单但很棘手:)

标签: antlr antlr3 antlrworks antlrv3ide


【解决方案1】:

您的规则可以匹配零个字符,因此词法分析器会出现问题。你需要:

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

看到“+”而不是“*”?

吉姆

【讨论】:

  • 问题中的ID 规则匹配一个或多个字符。此答案中的规则匹配两个或多个字符。
猜你喜欢
  • 2018-02-25
  • 2021-08-15
  • 2014-05-27
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
相关资源
最近更新 更多