私の実際の文法はもっと複雑ですが、問題を取り除くことができました。したがって、これは文法です:
grammar test2;
options {language=CSharp3;}
@parser::namespace { Test.Parser }
@lexer::namespace { Test.Parser }
start : 'VERSION' INT INT project;
project : START 'project' NAME TEXT END 'project';
START: '/begin';
END: '/end';
WS : ( ' '
| '\t'
| '\r'
| '\n'
) {$channel=HIDDEN;}
;
INT : '0'..'9'+;
NAME: ('a'..'z' | 'A'..'Z')+;
TEXT : '"' ( '\\' (.) |'"''"' |~( '\\' | '"' | '\n' | '\r' ) )* '"';
STARTA
: '/begin hello';
そして、これを解析したい(たとえば):
バージョン 1 1
/プロジェクト開始
testproject "ここに説明が入ります"
/終わり
事業
現在、このようには機能しません (Mismatched token exception)。最後のトークン STARTA を削除すると、機能します。しかし、なぜ?理解できません。
助けていただければ幸いです。ありがとう。