我正在实现一个编译器,我想做的一件事就是使用' +'进行字符串连接,例如:
str_cnct = "hi" + "dear"
所以现在的价值是" hidear"。
问题是我的flex中的正则表达式将所有这些直接捕获为一个字符串,给出了#34; hi + dear"。
我目前的正则表达式是:\".*\"
{string} {
yylval.struct_val.val.chain = (char *)malloc(sizeof(char)*yyleng);
strncpy(yylval.struct_val.val.chain,yytext,yyleng);
remove_char(yylval.struct_val.val.chain);
yylval.struct_val.length = yyleng;
yylval.struct_val.line = yylineno;
yylval.struct_val.column = columnno + yyleng + 2;
printf("--- String: %s\n", yylval.struct_val.val.chain);
return(STRING);
}
如何避免这种情况并捕获" hi"然后' +'作为运营商然后"亲爱的"?
提前致谢
答案 0 :(得分:0)
尝试以下内容:
^\"([^\"]*)\"\s*\+\s*\"([^\"]*)\"$
$ 1将捕获" hi"没有报价和2美元将捕获"亲爱的"没有字符串的引号"" hi" +"亲爱的"'。
答案 1 :(得分:0)
我终于经历了这样的事情:
%x MATCH_STR
quotes \"
%%
{quotes} { BEGIN(MATCH_STR); }
<MATCH_STR>[\n] { yyerror("String not closed"); }
<MATCH_STR>[^"^\n]* {
yylval.struct_val.val.chain = (char *)malloc(sizeof(char)*yyleng);
strncpy(yylval.struct_val.val.chain,yytext,yyleng);
remove_char(yylval.struct_val.val.chain);
yylval.struct_val.length = yyleng;
yylval.struct_val.line = yylineno;
yylval.struct_val.column = columnno + yyleng + 2;
printf("--- String: %s\n", yylval.struct_val.val.chain);
return(STRING);
}
<MATCH_STR>{quotes} { BEGIN(INITIAL); }