如果扫描程序无法识别文本,则默认情况下会将其发送到stdout
。怎么避免这个?
我可以添加许多规则,如
ANY (?s:.)
// ....
<TOKEN1>{ANY} {}
<TOKEN2>{ANY} {}
<TOKEN3>{ANY} {}
但我相信必须有更好的方法。
答案 0 :(得分:1)
在flex输入文件的规则部分的最后(在第二个%%之前),添加以下规则:
. /* suppress unrecognized characters */
重要的是这是最后一条规则。它匹配任何单个字符,然后不执行任何操作,因为为操作提供的唯一代码是注释。只要它是最后一条规则,它就不会匹配,除非它上面没有规则与下一个字符匹配,就像最长的正则表达式匹配一样。因此,如果您对等运算符有上述规则,例如......
= { code_here_to_work_with_equals(); }
. /* suppress unrecognized characters */
...词法分析器会发现两个规则都匹配字符&#39; =&#39;,它会在文件的前面选择规则来打破平局。
希望有所帮助: - )