Wpis z mikrobloga

Hej,

Mógłby mi ktoś przełożyć kod z kotlinowej javy na taką bardziej podstawową ? bo nie rozumiem tego tutaj i nie wiem jak to zaimplementować w swoim projekcie...
http://blog.lantkowiak.pl/index.php/2017/04/12/tokenizacja-kodu-zrodlowego/
Mam te klasy Java8Lexer itd ale

override fun tokenize(lexerType: LexerType, input: String): List {
val lexer = LexerFactory().getLexer(lexerType, CharStreams.fromString(input))

return lexer.allTokens.map { t -> t.type }

tego nie rozumiem ... fun ? map ? t - > t.type ?

Aktualnie mam coś takiego
Java8Lexer lexer = new Java8Lexer(new ANTLRInputStream(code));
List extends Token tokenList = new ArrayList<>();
tokenList= lexer.getAllTokens();
for(Token token : tokenList){
System.out.println("Nastepny token :" + token + "\n");
}

Ale nie zwraca mi tego co on ma na przykładzie tylko

Nastepny token :[@-1,8:12='class',<9>,1:8]

Nastepny token :[@-1,14:23='HelloWorld',<102>,1:14]

Nastepny token :[@-1,25:25='{',<59>,1:25]

Nastepny token :[@-1,33:38='public',<35>,2:4]

Nastepny token :[@-1,40:45='static',<38>,2:11]

Nastepny token :[@-1,47:50='void',<48>,2:18]

Nastepny token :[@-1,52:55='main',<102>,2:23]

Nastepny token :[@-1,56:56='(',<57>,2:27]

Nastepny token :[@-1,57:62='String',<102>,2:28]

Nastepny token :[@-1,63:63='[',<61>,2:34]

Nastepny token :[@-1,64:64=']',<62>,2:35]

Nastepny token :[@-1,66:69='args',<102>,2:37]

Nastepny token :[@-1,70:70=')',<58>,2:41]

Nastepny token :[@-1,72:72='{',<59>,2:43]

Nastepny token :[@-1,83:88='System',<102>,3:7]

Nastepny token :[@-1,89:89='.',<65>,3:13]

Nastepny token :[@-1,90:92='out',<102>,3:14]

Nastepny token :[@-1,93:93='.',<65>,3:17]

Nastepny token :[@-1,94:100='println',<102>,3:18]

Nastepny token :[@-1,101:101='(',<57>,3:25]

Nastepny token :[@-1,102:115='"Hello, World"',<55>,3:26]

Nastepny token :[@-1,116:116=')',<58>,3:40]

Nastepny token :[@-1,117:117=';',<63>,3:41]

Nastepny token :[@-1,124:124='}',<60>,4:4]

Nastepny token :[@-1,128:128='}',<60>,5:1]

a chciał bym dostać tak jak on :
tring var; VARIABLEDECLARATION
int i; VARIABLE
DECLARATION
i = 3; IDENTIFIER
ASSIGN
IDENTIFIER
if (i > 2) { IFSWITCHSTATEMENTBEGIN
OPEN
PARENTHESIS
IDENTIFIER
CONDITION
IDENTIFIER
CLOSEPARENTHESIS
var = "more than 2"; IDENTIFIER
ASSIGN
STRING
} IF
SWITCHSTATEMENTEND
else { IFSWITCHSTATEMENTBEGIN
var = "less than 2"; IDENTIFIER
ASSIGN
STRING
} IF
SWITCHSTATEMENTEND

#programowanie #java #kotlin #antlr
  • 1
lexer.allTokens.map { t -> t.type }

no to dla każdego elementu wykonuje tę funkcje zapisując jej wynik, czyli nagle zamiast nap Collection, masz Collection

Tak samo jak w javie 8 masz Streamy i tam .map.