使用ANTLR4计数令牌

时间:2015-08-13 09:22:17

标签: java antlr antlr4

我需要编写一个Java程序,使用ANTLR4,给定一个带有单个方法的源文件,可以计算变量,运算符,标点符号和保留字的数量。

如何根据类型使用ANTLR4来计算令牌?

1 个答案:

答案 0 :(得分:0)

您可以使用这样的hashmap来跟踪所有单词类型

@header {
import java.util.HashMap;
}

@members {
// Map variable name to Integer object holding value 
HashMap memory = new HashMap();
}

Identifier 
:   IdentifierNondigit(  IdentifierNondigit |   Digit )* {
    if(memory.containsKey(getText())){
        memory.put(getText(),(((Integer)memory.get(getText()))+1));     
    }
    else {
        memory.put(getText(),1);
    }
    System.out.println(getText()+" : "+memory.get(getText()));
} 
// { getText().length()<=3}?{ String str=getText(); while(str.length()<=3){ str=str+str;} setText(str);}
    |   IdentifierNondigit (   IdentifierNondigit |   Digit)* 
    ;

像这样,代替getToken(),你可以直接说“保留”键并在每次增量后存储计数