如果无法识别文本,如何将输出静音?

时间:2014-02-07 10:26:33

标签: flex-lexer

如果扫描程序无法识别文本,则默认情况下会将其发送到stdout。怎么避免这个? 我可以添加许多规则,如

ANY (?s:.)
// ....
<TOKEN1>{ANY} {}
<TOKEN2>{ANY} {}
<TOKEN3>{ANY} {}

但我相信必须有更好的方法。

1 个答案:

答案 0 :(得分:1)

在flex输入文件的规则部分的最后(在第二个%%之前),添加以下规则:

.    /* suppress unrecognized characters */

重要的是这是最后一条规则。它匹配任何单个字符,然后不执行任何操作,因为为操作提供的唯一代码是注释。只要它是最后一条规则,它就不会匹配,除非它上面没有规则与下一个字符匹配,就像最长的正则表达式匹配一样。因此,如果您对等运算符有上述规则,例如......

=    { code_here_to_work_with_equals(); }

.    /* suppress unrecognized characters */

...词法分析器会发现两个规则都匹配字符&#39; =&#39;,它会在文件的前面选择规则来打破平局。

希望有所帮助: - )