如何在LEX/FLEX中编写非贪婪的匹配?

stu*_*ith 12 regex lex flex-lexer

我正在尝试使用FLEX和BISON解析遗留语言(类似于'C').除了匹配字符串之外,一切都很好用.

这种相当奇怪的遗留语言不支持在字符串文字中引用字符,因此以下都是有效的字符串文字:

"hello"
""
"\"
Run Code Online (Sandbox Code Playgroud)

我正在使用以下规则来匹配字符串文字:

\".*\"            { yylval.strval = _strdup( yytext ); return LIT_STRING; }
Run Code Online (Sandbox Code Playgroud)

不幸的是,这是一个贪婪的匹配,所以它匹配如下代码:

"hello", "world"
Run Code Online (Sandbox Code Playgroud)

作为单个字符串(hello", "world).

通常的非贪婪量词.*?似乎在FLEX中不起作用.有任何想法吗?

hor*_*rsh 12

只是禁止在引号之间加引号.

\"[^"]*\"