【问题标题】:ANTLR grammar : Understand CP1252 euro characterANTLR 语法:了解 CP1252 欧元字符
【发布时间】:2017-09-11 12:05:45
【问题描述】:

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

CONCATENATE(10;" €" )

问题在于欧元符号。我过去常常把它写进我的语法中,这对学位符号非常有用:

fragment SPECIAL        :   '\u00B0';

但是欧元符号不像这个度数符号那样工作:

fragment SPECIAL        :   '\u00B0' | '\u20AC'

我正在使用 ANTLR 3.4 生成一个 PHP 解析器,生成的词法分析器代码如下所示:

$this->getToken('176')== $LA26 || ...

它应该为欧元符号添加这个,如果我在解析器生成后手动添加它(有两个地方可以添加它),它可以工作!

$this->getToken('128')== $LA26 || ...

我的问题是:如何将其添加到语法中以生成此代码?这一系列 unicode 符号是否有问题,以比 u00 开头的东西开头...因为我所有其他特殊字符都以 \u00

开头

非常感谢您与我共度时光。 真挚地 尼古拉斯。

【问题讨论】:

  • 将所有内容编码为 UTF-8!
  • 请停止拖钓,antlr php 不支持 utf8
  • 哦!真的?!我的朋友一点也不拖钓!
  • @delboy1978uk 这个问题是关于 ANTLR 4 的——不确定这是否相关。

标签: php antlr antlr3 antlrworks


【解决方案1】:

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

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

【讨论】:

  • 我会试试 0080。但是传递 unicode 点适用于 u00B0 度数或数字符号...这就是为什么我无法弄清楚问题出在哪里...
  • 0xB0 是 Unicode 和 CP1252 中学位的代码点,这可能是原因。
猜你喜欢
  • 1970-01-01
  • 2014-06-13
  • 2016-11-09
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多