ANTLR4 Literal for HEX字符串,包含换行

时间:2019-05-21 05:09:17

标签: python antlr antlr4

我试图为JTAG解析SVF文件,但发现此问题:

我必须解析一个可以包含空格和换行符的十六进制值,但是我还需要具有数字(不带空格)。

我有行注释,而空格不相关,所以我使用了以下词汇规则:

COMMENT : ('!' | '//') .*? '\n' -> skip ;
WS : [ \t\r\n]+ -> skip ;

数字和十六进制定义为:

hexLiteral : HEX | NUM ;

NUM : [0-9]+ ;
HEX : [0-9a-f]+ ;

如果输入的十六进制字符串中没有新行或空格,则此方法有效,例如:

hexBlock returns [val: str] : '(' hexLiteral ')' {print($hexLiteral.text)}

(0af3)上方跑动即可完成

但是我需要匹配并提取(0a3f 10 e2)返回0a3f10e2之类的字符串。

我的第一个想法是使用:

hexLiteral : (HEX | NUM) hexLiteral? ;

但是对该块的分析导致mismatched input '10' expecting ')'

1 个答案:

答案 0 :(得分:0)

您正在尝试使两个相反的东西协同工作:

  1. 您想忽略空格,我想您可以使用它们来分隔您语言中的标记。
  2. 您也希望在某些标记中包含空格。

与其建议您不要让语法接受所有类型的ws /数字组合,我建议将各个部分收集为正常数字,然后在运行分析后的语义阶段中,您可以检查分析树并将所有标记放在一起应该建立一个单元。