我试图为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 ')'
。
答案 0 :(得分:0)
您正在尝试使两个相反的东西协同工作:
与其建议您不要让语法接受所有类型的ws /数字组合,我建议将各个部分收集为正常数字,然后在运行分析后的语义阶段中,您可以检查分析树并将所有标记放在一起应该建立一个单元。