Frage

Problem: Das Unicode -Zeichen kann nicht richtig drucken lassen.

Hier ist meine Grammatik:

options { k=1; filter=true;
 // Allow any char but \uFFFF (16 bit -1)
charVocabulary='\u0000'..'\uFFFE'; 
}

ANYCHAR :'$'
|    '_' { System.out.println("Found underscore: "+getText()); }
|    'a'..'z' { System.out.println("Found alpha: "+getText()); }
|    '\u0080'..'\ufffe' { System.out.println("Found unicode: "+getText()); }
; 

Code -Snippet der Hauptmethode, die den Lexer aufrufen:

public static void main(String[] args) {
SimpleLexer simpleLexer = new SimpleLexer(System.in);
while(true) {
try {
Token t = simpleLexer.nextToken();
System.out.println("Token : "+t);

} catch(Exception e) {}

}
}

Für Eingabe "ठ", Ich bekomme die folgende Ausgabe:

Found unicode: 
Token : ["à",<5>,line=1,col=7]
Found unicode: 
Token : ["¤",<5>,line=1,col=8]
Found unicode:  
Token : [" ",<5>,line=1,col=9]

Es scheint, dass der Lexer Unicode char "ठ" als drei separate Zeichen behandelt. Mein Ziel ist es, "ठ" zu scannen und zu drucken.

War es hilfreich?

Lösung

Ihr Problem liegt nicht im von ANTLR erzeugten Lexer, sondern im Java -Stream, den Sie an ihn übergeben. Der Stream liest nur Bytes (interpretiert sie nicht in einer Codierung), und was Sie sehen, ist eine UTF-8-Sequenz.

Wenn es Antlr 3 ist, können Sie die verwenden Antlrinputstream Konstruktor, der als Parameter ein Altes nimmt:

ANTLRInputStream (InputStream input, String encoding) throws IOException
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top