是否可以编写包含一组规则的lex
或flex
脚本,其中最大匹配匹配步骤将始终与长度为零的字符串匹配?
我问这个是因为正则表达式的数学定义允许只匹配零长度字符串的正则表达式。例如,简单正则表达式ε仅匹配空字符串。但是,flex pattern documentation似乎不允许您指定此表单的正则表达式。
答案 0 :(得分:2)
我不了解lex,但flex可以使用尾随上下文匹配空字符串:
""/. { /* handle empty string */ }
这将匹配任何字符前的空字符串,但它几乎可以是任何模式(请参阅flex documentation about limitations)。
<INITIAL>""/[-]{2} { BEGIN(sqlcomment); }
<sqlcomment>[^\n]* { /* Handle sql comment, including -- */ BEGIN(INITIAL); }
如果要匹配输入的结尾,则必须使用特殊符号&lt;&lt;&lt; EOF&gt;&gt; (见flex documentation about eof)。
编辑:现在我想更多关于它,尾随上下文可能不是强制性的。只是&#34;&#34;可以工作。如果确实如此,我仍然强烈建议在可能的情况下使用尾随上下文。它可以防止输入格式错误导致的许多副作用,并有助于调试。