首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于ANTLR 4中的语义谓词

关于ANTLR 4中的语义谓词
EN

Stack Overflow用户
提问于 2022-02-14 07:49:01
回答 1查看 94关注 0票数 1

在这个问题:https://stackoverflow.com/a/28074334/5973816中,回答者说以下语法可以匹配以XYZ结尾的文本,并且不包含XYZ,但是我发现它不能,正确的语法应该是什么?

代码语言:javascript
复制
grammar UseLookahead;

parserRule : LexerRule;

LexerRule : .+? { (_input.LA(1) == 'X') &&
                  (_input.LA(2) == 'Y') &&
                  (_input.LA(3) == 'Z') 
                }?
          ;

我在本地测试,发现‘’只匹配'B‘。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-14 09:19:29

当我用以下Java代码测试您的语法时:

代码语言:javascript
复制
String source = "Blah Blah XYZ";

UseLookaheadLexer lexer = new UseLookaheadLexer(CharStreams.fromString(source));
CommonTokenStream stream = new CommonTokenStream(lexer);
stream.fill();

for (Token t : stream.getTokens()) {
  System.out.printf("%-35s `%s`%n",
      UseLookaheadLexer.VOCABULARY.getSymbolicName(t.getType()),
      t.getText().replace("\n", "\\n"));
}

印刷内容如下:

代码语言:javascript
复制
LexerRule                           `Blah Blah `
EOF                                 `<EOF>`

以及stderr上的下列警告:

代码语言:javascript
复制
line 1:10 token recognition error at: 'XYZ'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71108564

复制
相关文章

相似问题

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