首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >额外输入x期望x

额外输入x期望x
EN

Stack Overflow用户
提问于 2018-03-26 07:53:04
回答 1查看 590关注 0票数 0

我试图匹配一个非常基本的ANTLR语法。但是ANTLR一直在告诉我他得到了输入。并期望“.”。

完全错误是:

代码语言:javascript
复制
line 1:0 extraneous input '.' expecting '.'
line 1:2 missing '*' at '<EOF>'

有语法:

代码语言:javascript
复制
grammar regex;

@parser::header
{
    package antlr;
}

@lexer::header
{
    package antlr;
}


WHITESPACE : (' ' | '\t' | '\n' | '\r') -> channel(HIDDEN);
COMP       : '.';
KLEENE     : '*';

start : COMP KLEENE;

和投入:

代码语言:javascript
复制
.*

这两个文件具有相同的字符集:

代码语言:javascript
复制
regex.g: text/plain; charset=us-ascii
test.grammar: text/plain; charset=us-ascii

不应该混淆莱克星规则。为什么这不像预期的那样起作用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-26 08:12:34

给定您的示例语法和这个测试类:

代码语言:javascript
复制
import org.antlr.v4.runtime.*;

public class Main {
  public static void main(String[] args) {
    String source = ".*";
    regexLexer lexer = new regexLexer(CharStreams.fromString(source));
    regexParser parser = new regexParser(new CommonTokenStream(lexer));
    System.out.println(parser.start().toStringTree(parser));
  }
}

以下内容已打印到我的控制台:

代码语言:javascript
复制
(start . *)

我的猜测是,您要么把语法搞得太差,导致原来语法中的错误消失了,要么您没有生成新的lexer/解析器类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49486486

复制
相关文章

相似问题

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