public class Tokenizer {
public void tokenizer(String code) {
ANTLRInputStream in = new ANTLRInputStream(code);
Java8Lexer lexer = new Java8Lexer(in);
List<? extends Token> tokenList = new ArrayList<>();
tokenList = lexer.getAllTokens();
for(Token token : tokenList){
System.out.println("Next token :" + token.getType() + "\n");
}
}
}
此代码在具有令牌类型数量的int的屏幕列表上打印。 我需要这样的东西:
代码中包含类似“注释”的代码。 我怎样才能得到这个结果? 我有这个语法:https://github.com/antlr/grammars-v4/tree/master/java8
答案 0 :(得分:0)
Token
类包含多种方法,包括
int getLine();
int getCharPositionInLine();
将令牌与相应的源相关联。
答案 1 :(得分:0)
使用
token.getText()
你应该得到令牌代表的解析文本。
此外,您应该通过
获取令牌的名称lexer.getVocabulary().getSymbolicName(token.getType())
答案 2 :(得分:0)
您在这里遇到的问题是您希望在输出中混合使用令牌和规则。例如,VARIABLE_DECLARATION
实际上是解析器规则,而IDENTIFIER ASSIGN IDENTIFIER
由3个词法分析器规则组成。您可以使用令牌流来打印已识别的词汇,但这不会为您提供任何解析器规则。
你可以尝试的是打印返回解析树,当你对输入进行真正的解析运行时就会得到它(参见ParseTree.toString()
)。您可以使用解析器侦听器来遍历解析树,并将其转换为规则描述流以及属于规则(上下文)的文本。