在ANTLR3中使用空格分隔单词,其中一些单词是关键字

时间:2011-04-05 16:49:28

标签: antlr lexical-analysis

我正在开展一个项目,该项目涉及将部分语音标记文本转换为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个以上!)

这种方法似乎有效,但会产生~9000行Java Lexer并需要大量内存来构建(~2gb),因此我想知道这是否是解决此问题的最佳方法。

1 个答案:

答案 0 :(得分:0)

你能将TAG空间TOKEN组合成一个AST树吗?然后,您可以将TAG和TOKEN传递到源代码中进行处理。如果用于处理结果树的Java代码在各种TAG之间非常相似,那么您可以通过在Java代码中更复杂的权衡来简化ANTLR。