如何将ocamllex的非行终止字符规则正确转写为sedlex格式?
转写说明
你提到的两种SUB写法都是合法可用的,运行结果完全一致,都能匹配除'\x0D'(回车)和'\x0A'(换行)之外的任意字符:
SUB(SUB(any, '\x0D'), '\x0A'):分两次执行集合减法,先从全字符集中移除'\x0D',再移除'\x0A'SUB(any, ('\x0D' | '\x0A')):单次执行集合减法,直接从全字符集中移除'\x0D'和'\x0A'构成的集合
更推荐第二种SUB写法,逻辑更简洁,和你原ocamllex中[^ '\x0D' '\x0A']的语义对应更直观。
此外还有更贴近原写法风格的等价方案,直接用sedlex内置的补集运算符compl即可:
let non_line_termination_character = compl ('\x0D' | '\x0A')
该写法和你原ocamllex定义的表意完全一致,代码更简洁可读性更高。
内容的提问来源于stack exchange,提问作者SoftTimur
相关产品推荐
相关产品推荐

