如何解决匹配空输入的flex脚本?
| 是否可以编写包含一组规则的lex
或ѭ1where脚本,其中最大munch匹配步骤将始终匹配长度为零的字符串?
我之所以这样问是因为正则表达式的数学定义允许只匹配零长度字符串的正则表达式。例如,简单的正则表达式ε只匹配空字符串。但是,弹性模式文档似乎不允许您指定这种形式的正则表达式。
解决方法
我不了解lex,但是flex可以通过使用尾随上下文来匹配空字符串:
\"\"/. { /* handle empty string */ }
这将在任何字符之前匹配一个空字符串,但几乎可以是任何模式(有关限制的信息,请参见flex文档)。
<INITIAL>\"\"/[-]{2} { BEGIN(sqlcomment); }
<sqlcomment>[^\\n]* { /* Handle sql comment,including -- */ BEGIN(INITIAL); }
如果要匹配输入的结尾,则必须使用特殊符号<< EOF >>(请参阅有关eof的flex文档)。
编辑:现在,我对此进行了更多思考,尾随上下文可能不是强制性的。只是\“ \”可能有效。如果是这样,我仍然强烈建议在可能的情况下使用尾随上下文。它可以防止输入格式错误的许多副作用,并有助于调试。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。