ANTLR4 词法分析器 getTokens() 方法 returns 只有 <EOF> 标记
ANTLR4 lexer getTokens() method returns only the <EOF> token
基本上,我有以下代码:
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>
令牌,我是不是漏掉了什么?我确定文件中还有更多标记。
当我copy-paste你的代码时,我无法复制它。
这是测试语法:
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>
很可能,您已经使用解析器实例消耗了所有令牌。在创建 CommonTokenStream
之前执行 lexer.reset();
:
lexer.reset();
CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
...
基本上,我有以下代码:
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>
令牌,我是不是漏掉了什么?我确定文件中还有更多标记。
当我copy-paste你的代码时,我无法复制它。
这是测试语法:
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>
很可能,您已经使用解析器实例消耗了所有令牌。在创建 CommonTokenStream
之前执行 lexer.reset();
:
lexer.reset();
CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
...