gpt4 book ai didi

java - ANTLR:Unicode 字符扫描

转载 作者:搜寻专家 更新时间:2023-10-31 19:58:39 25 4
gpt4 key购买 nike

问题:无法正确打印 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 方法调用词法分析器的代码片段:

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 字符“ठ”视为三个单独的字符。我的目标是扫描并打印“ठ”。

最佳答案

您的问题不在 ANTLR 生成的词法分析器中,而是在您传递给它的 Java 流中。该流仅读取字节(不以编码方式解释它们),您看到的是一个 UTF-8 序列。

如果是 ANTLR 3,你可以使用 ANTLRInputStream将编码作为参数的构造函数:

ANTLRInputStream (InputStream input, String encoding) throws IOException

关于java - ANTLR:Unicode 字符扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3631604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com