首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ANTLR4 lexer getTokens()方法只返回<EOF>令牌

ANTLR4 lexer getTokens()方法只返回<EOF>令牌
EN

Stack Overflow用户
提问于 2022-01-31 00:31:48
回答 1查看 126关注 0票数 1

基本上,我有以下代码:

代码语言:javascript
运行
复制
assert lexer != null;
CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);commonTokenStream.fill();

List<Token> lst = commonTokenStream.getTokens();
FileWriter f = new FileWriter(output);

            for (Token t : lst) {
                f.write(t.toString());
                System.out.println(t.getText());
            }
f.close();

但是,该文件只获得写入它的<EOF>令牌,我是不是遗漏了什么?我肯定文件里还有更多的记号。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-31 06:53:13

当我复制粘贴您的代码时,我无法复制它。

这是测试语法:

代码语言:javascript
运行
复制
grammar T;

parse
 : ANY*? EOF
 ;

ANY
 : .
 ;

和Java代码:

代码语言:javascript
运行
复制
TLexer lexer = new TLexer(CharStreams.fromString("mu"));
CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
commonTokenStream.fill();

List<Token> lst = commonTokenStream.getTokens();

for (Token t : lst) {
  System.out.println(t.getText());
}

产生以下输出:

代码语言:javascript
运行
复制
m
u
<EOF>

最有可能的是,您已经使用解析器的实例使用了所有令牌。在创建lexer.reset();之前执行CommonTokenStream

代码语言:javascript
运行
复制
lexer.reset();
CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70920167

复制
相关文章

相似问题

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