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",所以我编辑了我的原文更好地符合。)
我正在使用 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",所以我编辑了我的原文更好地符合。)