flex&bison 解析带引号的字符串

flex&bison parse quoted string

我正在使用 flex&bison 用纯 C 编写解析器。我试图弄清楚如何解析用双引号引起来的类似 C 的字符串文字。有人可以为我提供一个简单的 flex 代码片段来执行此操作吗?

例如,在 ANTLR 中,字符串文字的语法可以只用这两行来表达

StringLiteral: UnterminatedStringLiteral '"';
UnterminatedStringLiteral: '"' (~["\\r\n] | '\' (. | EOF))*;

看来在flex中更难实现。

一个简单的 flex 解决方案看起来很像您提供的 Antlr 规则:

string_start    ["]([^"\\r\n]|\(.|\n))*
%%
{string_start}["]   { /* Do something with yytext */; return STRING; }
{string_start}      { /* Register unterminated string error */ }

(这里缺少一些细节,比如换行符是否可以出现在字符串中。从 Antlr 模式看来,我认为答案应该是 "no",所以我编辑了我的原文更好地符合。)