如何在lex中捕获未定义的规则

时间:2012-09-03 01:13:33

标签: posix lex

说我有一些规则和行动,如此

,                   { do something; }
\.                  { do_something; }
\(                  { do_someting; }
\)                  { do_something); }
:                   { do_something; }
...

每当我匹配左边的规则时,右边的动作就会被调用。 但是,如果我想匹配其他一切呢?我怎么能这样做?

使用

之类的东西
.*          { do_something; }

不起作用,因为它也适用于上述规则。

1 个答案:

答案 0 :(得分:2)

根据the lex spec

  

在模式匹配期间,lex将搜索模式集   单个最长的匹配。在匹配相同数字的规则中   对于字符,应首先选择规则。

所以我会选择:

.  { do_something; }

......并将其作为最后一条规则。

这将匹配单个字符,除了换行符(“A< newline>不应与句点运算符匹配”)。如果您还想匹配换行符:

.|\n  { do_something }

最后,如果您实际上不想使用该字符,则需要一个与空字符串匹配的扩展正则表达式(ERE)。你可以尝试:

.{0}  { do_something }

当我阅读lex和EREs的规范时,我相信它应该可行,但如果它在某处发现某些错误,我也不会感到惊讶: - )