2011-04-05 11 views
0

我正在研究一个涉及将词性标记文本转换为ANTLR3 AST的项目,其中短语作为AST的节点。Lexing在ANTLR3中的空格分隔单词,其中有些单词是关键字

输入到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),因此我想知道这是否是opti解决这个问题的方法不正确。

回答

0

您可以将TAG空间TOKEN合并到一个AST树中吗?然后,您可以将TAG和TOKEN都传递到您的源代码中进行处理。如果用于处理结果树的Java代码在各种TAG之间非常相似,那么您可以简化ANTLR,同时在Java代码中进行更复杂的折衷。

+0

感谢您的回应,但我不确定我是否遵循。你的意思是把TAG空间TOKEN识别为单个标记,也许是通过修改词法分析器? (尽管你可能对每种类型的TAG都有一个词法分析规则?) – Dan2097 2011-07-29 19:55:31

相关问题