Python 如何在Flex中返回令牌的最短匹配?

Python 如何在Flex中返回令牌的最短匹配?,python,c,lex,lexical-analysis,Python,C,Lex,Lexical Analysis,我正在为Python2.7编写一个词法分析器。我对longstring项的正则表达式有问题。这是我为此类字符串编写的代码: ESCAPESEQ \\\x SHORTSTRINGITEM {SHORTSTRINGCHAR}|{ESCAPESEQ} SHORTSTRING (\'{SHORTSTRINGITEM}*\')|(\"{SHORTSTRINGITEM}*\") LONGSTRINGCHAR [^\\(\'\'\')(\"\"\")] LONGSTRINGITEM {LONGSTRI

我正在为Python2.7编写一个词法分析器。我对longstring项的正则表达式有问题。这是我为此类字符串编写的代码:

ESCAPESEQ   \\\x
SHORTSTRINGITEM {SHORTSTRINGCHAR}|{ESCAPESEQ}
SHORTSTRING (\'{SHORTSTRINGITEM}*\')|(\"{SHORTSTRINGITEM}*\")
LONGSTRINGCHAR  [^\\(\'\'\')(\"\"\")]
LONGSTRINGITEM  {LONGSTRINGCHAR}|{ESCAPESEQ}
LONGSTRING  (\'\'\'{LONGSTRINGITEM}*\'\'\')|(\"\"\"{LONGSTRINGITEM}*\"\"\")
LONGSTRINGLITERAL   {STRINGPREFIX}?{LONGSTRING}
如果我分析一个Python代码,其中有两个长字符串与其他令牌分开,那么我的分析器将返回这两个长字符串以及它们之间的代码作为on令牌。这是因为Flex试图返回可能的最长匹配。但是,我只想返回这个令牌longstring的最短匹配。
谢谢你的回答。

试着这样定义它:

DOCUMENTACION_D \"\"\"
DOCUMENTACION   {DOCUMENTACION_D}([^\"]|\\\"|\n)*{DOCUMENTACION_D}
{DOCUMENTACION} {
  doSomething();
}
规则是这样的:

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

在这篇文章中,有一个确切的答案:非常感谢。