1

在 Antlr Lexer 中,如何实现解析这样的令牌:

包含任何非空格字母但不包含 '.{' 的单词。我能想到的最好的方法是使用语义谓词。

WORD: WL+   {!getText().contains(".{")};
WL: ~[ \n\r\t];

我有点担心使用语义谓词,尽管因为这里的 WORD 会被数百万次词法分析,我认为放置语义谓词会影响性能。

这是来自我需要解析以下内容的要求:

TOKEN_ONE.{TOKEN_TWO}

而 TOKEN_ONE 可以包括 . 和 { 在它的信中。

我正在使用 Antlr 4。

4

2 回答 2

1

您需要将谓词评估限制在输入中紧跟在 a 之后的情况.

WORD
  : ( ~[. \t\r\n]
    | '.' {_input.LA(1)!='{'}?
    )+
  ;
于 2013-10-08T04:23:40.810 回答
-2

如何将您的问题改写为等效的“一个单词包含除空格或点或左大括号之外的任何字符”。

那么词法分析器规则就是:

 WORD:  ~[ \n\r\t.{]*
于 2013-10-07T21:08:51.503 回答