[英]How tokenize code with ANTLR v4
一開始我想為我糟糕的英語道歉。 我制作webApp和我的任務我需要做的是標記化Java代碼。 我找到了像ANTLR v4這樣的工具,我試圖實現它。
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
Token
類包含幾種方法,包括
int getLine();
int getCharPositionInLine();
將令牌與相應的源相關聯。
運用
token.getText()
你應該得到令牌代表的解析文本。
此外,您應該獲取令牌的名稱
lexer.getVocabulary().getSymbolicName(token.getType())
您在這里面臨的問題是您希望在輸出中混合使用令牌和規則。 例如, VARIABLE_DECLARATION
實際上是一個解析器規則,而IDENTIFIER ASSIGN IDENTIFIER
由3個詞法分析器規則組成。 您可以使用令牌流來打印已識別的詞匯,但這不會為您提供任何解析器規則。
你可以嘗試的是打印返回解析樹,當你對輸入進行真正的解析運行時會得到它(參見ParseTree.toString()
)。 您可以使用解析器偵聽器來遍歷解析樹,並將其轉換為規則描述流以及屬於規則(上下文)的文本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.