基本上,我有以下代码:
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>
令牌,我是不是遗漏了什么?我肯定文件里还有更多的记号。
发布于 2022-01-31 06:53:13
当我复制粘贴您的代码时,我无法复制它。
这是测试语法:
grammar T;
parse
: ANY*? EOF
;
ANY
: .
;
和Java代码:
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());
}
产生以下输出:
m
u
<EOF>
最有可能的是,您已经使用解析器的实例使用了所有令牌。在创建lexer.reset();
之前执行CommonTokenStream
lexer.reset();
CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
...
https://stackoverflow.com/questions/70920167
复制相似问题