我正在尝试使用 FLEX 和 BISON 解析遗留语言(类似于“C”)。除了匹配字符串之外,一切都运行良好。
这种相当奇怪的遗留语言不支持在字符串文字中引用字符,因此以下都是有效的字符串文字:
"hello"
""
"\"
我使用以下规则来匹配字符串文字:
\".*\" { yylval.strval = _strdup( yytext ); return LIT_STRING; }
不幸的是,这是一个贪婪匹配,因此它匹配如下代码:
"hello", "world"
作为单个字符串(hello", "world
)。
通常的非贪婪量词 .*?
似乎在 FLEX 中不起作用。有什么想法吗?
最佳答案
只是禁止在引号之间使用引号。
\"[^"]*\"
关于regex - 如何在 LEX/FLEX 中编写非贪婪匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4166194/