如何明确写出gnu flex的默认规则?

How to explictly write the default rule of gnu flex?

flex 手册说如下。

By default, any text not matched by a flex scanner is copied to the output

我想明白怎么写清楚。是这样的吗?

%%
. ECHO;

另外,如何禁用默认规则?

默认规则是:

.|\n    ECHO;

(在每个开始条件下)

请记住 (f)lex 中的 . 不匹配换行符。

要禁用默认规则,请使用声明

%option nodefault

执行此操作后,如果您的规则未涵盖所有可能发生的情况,您将收到警告。如果您忽略警告并使用生成的扫描仪,如果输入不匹配任何模式,它将停止并出现致命错误。

由于您几乎不需要默认规则,因此我建议始终使用上述 %option

如果您有一些自己的默认规则,可以将其放在文件的最后一个规则中:

<*>.|\n   /* default action here */