Слова с разделением пробелами в ANTLR3, где некоторые слова являются ключевыми словами - PullRequest
0 голосов
/ 05 апреля 2011

Я работаю над проектом, который предусматривает преобразование части текста с тегами речи в 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 ГБ), поэтому мне было интересно, является ли это оптимальным способом решения этой проблемы.

1 Ответ

0 голосов
/ 18 июля 2011

Не могли бы вы объединить TAG пробел в одно дерево AST?Затем вы можете передать оба тега и TOKEN в ваш исходный код для обработки.Если код Java, используемый для обработки результирующего дерева, очень похож между различными тегами, то, возможно, вы могли бы упростить ANTLR с компромиссом немного более сложного в вашем коде Java.

...