非常に基本的な 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; } ;