開始時私は悪い英語をお詫びしたい。 私はwebAppを作成し、私の仕事はJavaコードをトークン化することです。私はANTLR v4のようなツールを見つけ、それを実装しようとしました。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");
}
}
}
このコードは、number of token typeのintの画面リストに表示されます。コードへの「コメント」のようなもので
コード: 私はこのようなものが必要。 どうすればこの結果が得られますか? 私はこの文法を持っている:https://github.com/antlr/grammars-v4/tree/master/java8
こんにちは、ありがとうございました。 コードは次のようになります。 'public void tokenizer(String code){ \t \t ANTLRInputStream in = new ANTLRInputStream(code); \t Java8Lexerレクサー=新しいJava8Lexer(入力); \tリスト<? extends Token> tokenList = new ArrayList <>(); \t tokenList = lexer.getAllTokens(); (トークントークン:tokenList)用\t \t \t \t \t { \t \t \t \tのSystem.out.println(lexer.getVocabulary()getSymbolicName(token.getType()))。 \t} \t} に}」 が私を返し ヌル ヌル ヌル ヌル... 方法token.getText()入力コードからの要素を私に文字列を返す... – Daxter44
私はに鉱山にあなたのコードをコピーANTLR4 Java8文法で実行します。 識別子 識別子 SEMI INT 識別子 SEMI 識別子 ASSIGN IntegerLiteral SEMI RPAREN LPAREN 識別子 GT IntegerLiteral IF LBRACE 識別子 ASSIGN StringLiteral SEMI :出力は私に次のようになりますRBRACE ELSE LBRACE 識別子 ASSIGN StringLiteral SEMI RBRACE – Malte
あなたはあなたの例に示すように、より抽象的な知を抽出したい場合は、トークンストリームを解析し、TreeWalkerのでパースツリーをトラバースしなければなりません。パーサには、照会するボキャブラリもあります。 – Malte