对ANTLR3中空格分隔的单词进行词法分析,其中一些单词是关键字

对ANTLR3中空格分隔的单词进行词法分析,其中一些单词是关键字,antlr,lexical-analysis,Antlr,Lexical Analysis,我正在从事一个项目,该项目涉及将带有词性标记的文本转换为ANTLR3 AST,并将短语作为AST的节点 ANTLR的输入如下所示: DT-THE The NN dog VBD sat IN-ON on DT-THE the NN mat STOP . i、 e.标记标记+标记或标记均不包含空格 以下是一种很好的词法分析方法: WS : (' ')+ {skip();}; TOKEN : (~' ')+; 然后,语法中有如下条目来描述AST的最低级别: dtTHE:'DT-THE' TOKE

我正在从事一个项目,该项目涉及将带有词性标记的文本转换为ANTLR3 AST,并将短语作为AST的节点

ANTLR的输入如下所示:

DT-THE The NN dog VBD sat IN-ON on DT-THE the NN mat STOP .
i、 e.标记标记+标记或标记均不包含空格

以下是一种很好的词法分析方法:

WS :  (' ')+ {skip();};
TOKEN : (~' ')+;
然后,语法中有如下条目来描述AST的最低级别:

dtTHE:'DT-THE' TOKEN -> ^('DT-THE' TOKEN);
nn:'NN' TOKEN -> ^('NN' TOKEN);
还有更多


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

能否将标记空间令牌组合到单个AST树中?然后可以将标记和令牌传递到源代码中进行处理。如果用于处理生成的树的Java代码在不同的标记之间非常相似,那么您也许可以简化ANTLR,并在Java代码中进行更复杂的权衡。

谢谢您的回答,但我不确定我是否完全理解。您的意思是,可能通过修改lexer,将标记空间标记识别为单个标记吗?尽管这样,对于每种类型的标记,您可能有一个lexer规则?