gpt4 book ai didi

java - antlr3 unicode字符导致错误

转载 作者:行者123 更新时间:2023-11-30 04:49:06 24 4
gpt4 key购买 nike

我正在尝试为带有 unicode 支持的小型 DSL 编写 antlr3 语法(德语变音符号 äöüäÖÜß 需要),但我似乎无法让它工作。

我编写了一个最小的测试语法,它应该匹配任何 unicode 字符序列,例如“xay”(效果很好)或“xäy”(效果不佳)。

语法如下:

grammar X;

@lexer::header {
import org.antlr.runtime.ANTLRInputStream;
import org.antlr.runtime.ANTLRStringStream;
import org.antlr.runtime.CommonTokenStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
}

@lexer::members {

public static void main(String[] args) throws Exception {
ANTLRInputStream stream = new ANTLRInputStream( new ByteArrayInputStream("x\u00C4y".getBytes()), "utf-8");
XLexer lex = new XLexer(stream);
CommonTokenStream c = new CommonTokenStream(lex);
XParser p = new XParser(c);
p.x();
}

}

x : UTF8+;

UTF8 : ('\u0000'..'\uF8FF');

对于“xäx”,我收到以下错误:

line 1:1 mismatched character '?' expecting set null

我错过了什么?

谢谢!

最佳答案

我编译了你的语法(使用 Antlr 3.4),它对我来说没有问题。这就是我所做的:

$ java -jar antlr-3.4-complete-no-antlrv2.jar X.g
$ javac -cp antlr-3.4-complete-no-antlrv2.jar XLexer.java XParser.java
$ CLASSPATH=$CLASSPATH:./antlr-3.4-complete-no-antlrv2.jar:./XLexer.class:./XParser.class java XLexer

我还插入了一些代码,在解析字符串之前将其打印到 STDOUT,它打印了预期的字符串 xäy

有一个想法:也许你的默认编码(我认为,它是在 JVM 启动时的 file.encoding 属性中指定的) -up time) 设置为 UTF-8 以外的其他内容。要对此进行测试,请尝试在对 getBytes() 的调用中显式指定编码:

ANTLRInputStream stream = new ANTLRInputStream( new ByteArrayInputStream("x\u00C4y".getBytes("UTF-8")), "utf-8");

关于java - antlr3 unicode字符导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10246851/

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