如何return Flex 中令牌的最短匹配?

How to return the shortest match for a token in Flex?

我正在为 Python 2.7 编写词法分析器。我对长字符串项的正则表达式有疑问。这是我为这种字符串编写的代码:

ESCAPESEQ   \\x
SHORTSTRINGITEM {SHORTSTRINGCHAR}|{ESCAPESEQ}
SHORTSTRING (\'{SHORTSTRINGITEM}*\')|(\"{SHORTSTRINGITEM}*\")
LONGSTRINGCHAR  [^\(\'\'\')(\"\"\")]
LONGSTRINGITEM  {LONGSTRINGCHAR}|{ESCAPESEQ}
LONGSTRING  (\'\'\'{LONGSTRINGITEM}*\'\'\')|(\"\"\"{LONGSTRINGITEM}*\"\"\")
LONGSTRINGLITERAL   {STRINGPREFIX}?{LONGSTRING}

如果我分析一个 Python 代码,它有两个与其他标记分开的长字符串,我的分析器 return 将这两个长字符串和它们之间的代码作为标记。那是因为 Flex 尝试 return 最长的匹配。但是我想 return 仅针对此令牌长字符串进行最短匹配。 谢谢你的回答。

尝试这样定义它:

DOCUMENTACION_D \"\"\"
DOCUMENTACION   {DOCUMENTACION_D}([^\"]|\\"|\n)*{DOCUMENTACION_D}

规则是这样的:

{DOCUMENTACION} {
  doSomething();
}