Mar*_*ote 3 utf-8 lexical-analysis flex-lexer
似乎flex不支持UTF-8输入.每当扫描程序遇到非ASCII字符时,它就会停止扫描,就像它是EOF一样.
有没有办法强迫flex吃掉我的UTF-8字符?我不希望它实际上匹配UTF-8字符,只是在使用'.'时吃掉它们.图案.
有什么建议吗?
编辑
最简单的解决方案是:
任何[\ x00-\xff]
并使用'ANY'而不是'.' 在我的规则中.
我一直在研究这个并阅读Flex邮件列表,看看有没有人想过它.让Flex读取unicode是一件复杂的事情......
可以完成UTF-8编码,大多数其他编码(16s)将导致大量表格驱动自动机.
目前常用的方法是:
我所做的只是编写匹配单个UTF-8字符的模式.它们看起来类似于以下内容,但您可能想重新阅读UTF-8规范,因为我很久以前就写过这个.
您当然需要将这些组合起来,因为您需要unicode字符串,而不仅仅是单个字符.
UB [\200-\277] %%
[\300-\337]{UB} { do something }
[\340-\357]{UB}{2} { do something }
[\360-\367]{UB}{3} { do something }
[\370-\373]{UB}{4} { do something }
[\374-\375]{UB}{5} { do something }
Run Code Online (Sandbox Code Playgroud)
取自邮件列表.
在进一步研究之后,我可能会考虑为UTF-8支持创建一个合适的补丁.对于大型.l文件,上述解决方案似乎无法维护.真是太丑了!您可以使用类似的范围来创建'.' 替换规则匹配所有ASCII和UTF-8字符,但仍然相当丑陋.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
6674 次 |
| 最近记录: |