我正在尝试做一些非常基本的 C++ 函数声明解析。这是我解析输入参数的规则:
arg : 'const'? 'unsigned'? t=STRING m=TYPEMOD? n=STRING
-> ^(ARG $n $t $m?) ;
STRING : ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'::')+ ;
TYPEMOD
: ('*' | '&')+ ;
问题是我试图通过它:
int *param
它将“int”与 t 匹配,但随后跳过 TYPEMOD,在尝试匹配 n 时抛出异常说 * 是不需要的,然后将“param”与 n 匹配。为什么它会跳过 TYPEMOD 令牌而不匹配它?
提前致谢!
编辑:
这是我的空格规则(我也包括了我的注释规则),在解析类声明、属性、结构等其他内容时,一切似乎都运行良好,只是这些 TYPEMOD 的东西......
COMMENT_LINE
: '//' (~'\n')* '\n' { $channel = HIDDEN; } ;
COMMENT_BLOCK
: '/*' .* '*/' { $channel = HIDDEN; } ;
NL : ('\r' | '\n')+ { $channel = HIDDEN; } ;
WS : (' '|'\t')+ { $channel = HIDDEN; } ;