将re2c与ISO-8859-x一起使用

时间:2014-05-07 19:42:50

标签: regex tokenize iso-8859-15 re2c

我们在ISO-8859-15中有一些我们想要标记化的文本。 (ISO-8859-15是带有欧元符号和其他常见重音字符的ISO-8859-1,有关详细信息,请参阅ISO-8859-15)。

我正在尝试让解析器识别所有字符。我正在使用的文本编辑器的原生字符表示是UTF-8,因此为了避免隐藏的转换问题,我将所有re2c代码限制为ASCII ,例如

LATIN_CAPITAL_LETTER_A_WITH_GRAVE      = "\xc0" ;
LATIN_CAPITAL_LETTER_A_WITH_ACUTE      = "\xc1" ;
LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX = "\xc2" ;
LATIN_CAPITAL_LETTER_A_WITH_TILDE      = "\xc3" ;
...

然后:

UPPER    = [A-Z] | LATIN_CAPITAL_LETTER_A_WITH_GRAVE
                 | LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX
                 | LATIN_CAPITAL_LETTER_AE
                 | LATIN_CAPITAL_LETTER_C_WITH_CEDILLA
                 | ...

WORD     = UPPER LOWER* | LOWER+ ;

它没有编译任何问题,并且在ASCII上运行良好,但只要它碰到这些扩展字符就会停止。

有没有人见过这个,有没有办法解决它?

谢谢,

一民

1 个答案:

答案 0 :(得分:3)

是的,我已经看过了。与字节≥128的有符号和无符号类型的比较有关。

两种解决方法:使用unsigned char作为默认类型,例如 re2c:define:YYCTYPE = "unsigned char";-funsigned-char(如果使用gcc,则使用其他编译器有相同的)作为编译标志。您可以使用最不干扰现有代码的那个。