2009-12-17 89 views
2

我已经使用精灵经典了很长一段时间,最近开始学习 v2。两者都易于使用和功能强大,足以处理中度解析 问题。如何更改解析器的内部字符类型?

在精神古典和ascii字符的田园诗般的日子里, 这项工作只是简单地将EBNF修改为LL格式。但最后,我必须 处理国际。

我的想法很粗糙。创建一个前向迭代器,它在任何编码的输入文本字节流上迭代 。迭代器处理 这些编码转换作业,并为解析器提供utf16/32代码 单元(该迭代器可以通过iconv或icu4c轻松实现)。

代码单元的类型应该是解析器处理的内部字符类型。 但通过阅读文档后,我只能找到几个 原语,迭代器模板具有显式的char_t参数。 这意味着我必须重新配置这些数字,指令,扫描仪和 等?

我也检出了v2文档。它提供了一种命名空间的方式来使 的所有内容保持一致,但仍然没有太多关于如何明确地更改内部char类型的内容。再次,我搜索了邮件列表 存档,但似乎那些unicode和其他编码相关的帖子是 还在空中。有人告诉我,通过不同编码的文件,精神仍然可以工作 。所以我使用不同编码但内容相同的文件测试了解析器 。几个MBCS 编码的文件通过了测试,随便传递了一些utf8文件。 但其他编码大部分时间都失败了。

回答

1

我怀疑你已经从Boost Spirit网站找到char_character encoding namespace

最后一页包含有帮助的注释

“我们对每个字符集灵命名空间会支持。这包括ASCII,ISO8859_1,标准和standard_wide(和将来,Unicode)的。”

换句话说,助推精神目前并不真正支持unicode。它在他们的TODO名单上。

在平均时间,你可以尝试一种缺憾的解决方法是这样的:

my_tag_ = lit("<") >> byte_ >> lit(">"); 

将匹配恰好尖括号之间出现的任何二进制字符串,为您提供不使用任何字符集相关的过滤器就可以了。