Я работаю над проектом, который предусматривает преобразование части текста с тегами речи в ANTLR3 AST с фразами в качестве узлов AST.
Вход в ANTLR выглядит следующим образом:
DT-THE The NN dog VBD sat IN-ON on DT-THE the NN mat STOP .
т.е. (тег токен) +, где ни тег, ни токен не содержат пробелов.
Является ли следующий хороший способ сказать это:
WS : (' ')+ {skip();};
TOKEN : (~' ')+;
Затем грамматика содержит записи, подобные приведенным ниже, для описания самого низкого уровня AST:
dtTHE:'DT-THE' TOKEN -> ^('DT-THE' TOKEN);
nn:'NN' TOKEN -> ^('NN' TOKEN);
(и еще 186 из них!)
Этот подход, кажется, работает, но в результате получается Java Lexer ~ 9000 строк и требует большого объема памяти для сборки (~ 2 ГБ), поэтому мне было интересно, является ли это оптимальным способом решения этой проблемы.