Python 如何在Flex中返回令牌的最短匹配?
我正在为Python2.7编写一个词法分析器。我对longstring项的正则表达式有问题。这是我为此类字符串编写的代码: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
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();
}
在这篇文章中,有一个确切的答案:非常感谢。