说我有一些规则和行动,如此
, { do something; }
\. { do_something; }
\( { do_someting; }
\) { do_something); }
: { do_something; }
...
每当我匹配左边的规则时,右边的动作就会被调用。 但是,如果我想匹配其他一切呢?我怎么能这样做?
使用
之类的东西.* { do_something; }
不起作用,因为它也适用于上述规则。
答案 0 :(得分:2)
根据the lex spec:
在模式匹配期间,lex将搜索模式集 单个最长的匹配。在匹配相同数字的规则中 对于字符,应首先选择规则。
所以我会选择:
. { do_something; }
......并将其作为最后一条规则。
这将匹配单个字符,除了换行符(“A< newline>不应与句点运算符匹配”)。如果您还想匹配换行符:
.|\n { do_something }
最后,如果您实际上不想使用该字符,则需要一个与空字符串匹配的扩展正则表达式(ERE)。你可以尝试:
.{0} { do_something }
当我阅读lex和EREs的规范时,我相信它应该可行,但如果它在某处发现某些错误,我也不会感到惊讶: - )