簡體   English   中英

如何使用ANTLR v4對代碼進行標記化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM