我有一个非常简单的 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",
(由于某种原因“。”出现在最后一个关键字中,它错过了“工作”
如果我将 ABBRV 子句更改为
fragment ABBRV : ('.'WORD);
然后效果很好,但我得到关键字(asp)和关键字(.net) - 分开 - 但我需要它们作为一个单一的标记。
您可以提供的任何帮助将不胜感激。