【发布时间】:2010-09-02 21:57:24
【问题描述】:
问题:无法正确打印 Unicode 字符。
这是我的语法:
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()); }
;
调用词法分析器的main方法的代码sn-p:
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) {}
}
}
对于输入 "ठ",我得到以下输出:
Found unicode:
Token : ["à",<5>,line=1,col=7]
Found unicode:
Token : ["¤",<5>,line=1,col=8]
Found unicode:
Token : [" ",<5>,line=1,col=9]
词法分析器似乎将 Unicode 字符“ठ”视为三个单独的字符。我的目标是扫描和打印“ठ”。
【问题讨论】:
-
与您的问题无关,但我建议永远不要“吞下”您的异常:当出现问题时,您不知道发生了什么(以及发生在哪里)。至少不要使用
catch(Exception e) {}:catch(Exception e) { e.printStackTrace(); } -
你是对的先生 :) 给我的教训:在使用之前将复制的代码一直阅读到最后。