看起来flex不支持UTF-8输入。每当扫描器遇到非 ASCII 字符时,它就会停止扫描,就像它是 EOF 一样。
有没有办法强制 Flex 吃掉我的 UTF-8 字符?我不希望它实际匹配 UTF-8 字符,只需在使用“.”时吃掉它们即可图案。
有什么建议吗?
EDIT
最简单的解决方案是:
任意 [\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 }
摘自邮件列表。
在进一步研究之后,我可能会考虑创建一个适当的补丁来支持 UTF-8。对于大型 .l 文件,上述解决方案似乎无法维护。而且真的很丑!您可以使用类似于创建“.”的范围。替换规则来匹配所有 ASCII 和 UTF-8 字符,但仍然相当难看。
希望这可以帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)