私は本当に単純な ANTLR 文法を手に入れようとしていますが、現時点では惨めに失敗しています。これに関するいくつかの指針を本当に感謝します...
root : (keyword|ignore)*;
keyword : KEYWORD;
ignore : IGNORE;
KEYWORD : ABBRV|WORD;
fragment WORD : ALPHA+;
fragment ALPHA : 'a'..'z'|'A'..'Z';
fragment ABBRV : WORD?('.'WORD);
IGNORE : .{ Skip(); };
次のテスト入力を使用します。
"some ASP.NET and .NET stuff. that work."
キーワード ノードの単なるリストであるツリーが必要です。
"some", "ASP.NET", "and", ".NET", "stuff", "that", "work"
私が得る瞬間に
"some", "ASP.NET", "and", ".NET", "stuff. that",
(なぜか最後のキーワード内に「.」があり、「work」が抜けている)
ABBRV 句を次のように変更すると、
fragment ABBRV : ('.'WORD);
それはうまくいきますが、キーワード(asp)とキーワード(.net)を別々に取得しますが、それらは単一のトークンとして必要です。
あなたが与えることができるどんな助けも大歓迎です。