首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Antlr词法分析器排除某个模式

Antlr词法分析器排除某个模式
EN

Stack Overflow用户
提问于 2013-10-07 19:51:58
回答 2查看 1.5K关注 0票数 1

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

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

代码语言:javascript
复制
WORD: WL+   {!getText().contains(".{")};
WL: ~[ \n\r\t];

我有点担心使用语义谓词,因为这里的单词会被词化数百万次,我认为使用语义谓词会影响性能。

这来自于我需要解析如下内容的需求:

代码语言:javascript
复制
TOKEN_ONE.{TOKEN_TWO}

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

我使用的是Antlr 4。

EN

回答 2

Stack Overflow用户

发布于 2013-10-08 12:23:41

您需要将谓词计算限制在输入中紧跟在.后面的case。

代码语言:javascript
复制
WORD
  : ( ~[. \t\r\n]
    | '.' {_input.LA(1)!='{'}?
    )+
  ;
票数 1
EN

Stack Overflow用户

发布于 2013-10-08 05:08:52

将你的问题重新表述为等价的“一个单词包含除空格、点或左括号之外的任何字符”如何?

那么lexer规则就是:

代码语言:javascript
复制
 WORD:  ~[ \n\r\t.{]*
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19224181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档