Php ANTLR语法:理解CP1252欧元字符

Php ANTLR语法:理解CP1252欧元字符,php,antlr,antlr3,antlrworks,Php,Antlr,Antlr3,Antlrworks,我的语法很简单,但我希望它接受一些字符串,以便进行连接。此公式必须有效: CONCATENATE(10;" €" ) 问题在于欧元象征着什么。我以前是这么认为的,但这在我的语法中,对于学位符号来说非常有用: fragment SPECIAL : '\u00B0'; fragment SPECIAL : '\u00B0' | '\u20AC' $this->getToken('176')== $LA26 || ... 但欧元符号的作用与学位符号不同

我的语法很简单,但我希望它接受一些字符串,以便进行连接。此公式必须有效:

CONCATENATE(10;" €" )
问题在于欧元象征着什么。我以前是这么认为的,但这在我的语法中,对于学位符号来说非常有用:

fragment SPECIAL        :   '\u00B0';
fragment SPECIAL        :   '\u00B0' | '\u20AC'
$this->getToken('176')== $LA26 || ...
但欧元符号的作用与学位符号不同:

fragment SPECIAL        :   '\u00B0';
fragment SPECIAL        :   '\u00B0' | '\u20AC'
$this->getToken('176')== $LA26 || ...
我正在使用ANTLR 3.4生成一个PHP解析器,生成的lexer代码如下所示:

fragment SPECIAL        :   '\u00B0';
fragment SPECIAL        :   '\u00B0' | '\u20AC'
$this->getToken('176')== $LA26 || ...
如果我在解析器生成后手动添加它,有两个地方可以添加它,它就可以工作了

$this->getToken('128')== $LA26 || ...
我的问题是:如何在语法中添加它来生成代码?这个范围的unicode符号是否有问题,从wlse而不是u00开始。。。因为我所有的其他特殊字符都以\u00开头

非常感谢和我在一起的时间。 真诚地
Nicolas。

如果您的解析器使用CP1252输入,您希望它如何处理以Unicode代码点定义的标记


如果输入是CP1252,则需要使用该字符集的代码点。在CP1252中使用\u0080作为欧元符号。

将所有内容编码为UTF-8!请停止拖拉,antlr php不支持utf8oh!真正地我的朋友,一点也不要乱动!根据这一点,它是这样的@delboy1978uk这个问题是关于ANTLR 4的,但不确定这是否相关。我会试试0080。但传递unicode点对u00B0有效,即度或数字符号。。。这就是为什么我不能找出问题出在哪里…0xB0是Unicode和CP1252中degree的代码点,这可能就是原因。