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

2024-05-17 08:09:38 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

如果我分析一个Python代码,其中有两个longstring与其他标记分开,那么我的分析器返回这两个longstring以及它们之间的代码作为on标记。这是因为Flex试图返回可能的最长匹配。但是,我只想返回这个标记longstring的最短匹配。 谢谢你的回答。你知道吗


Tags: 字符串代码标记分析器词法longstringshortstringstringprefix