如何在Lex和Yacc中对String进行标记
参考我们正在使用的LEX YACC lex文件中的读取新行给出语法错误
%{ /* parser for ssa; */ #include #include #include"y.tab.h" %} %% [\t]+ ; \n ; [if]+ printf("first input\n"); [else]+ return(op); [=]+ return(equal); [+]+ return(op); [*]+ return(op); [-]+ return(op); [\] {return(bblock);} ([[_][az]])|([az][_][0-9]+)|([0-9]+) {return(var);} . ; %%
如果我想将令牌作为字符串,即a_2如何做,我该怎么办?
输入文件是
a_2 = _6 + b_3; a_8 = b_7 - c_5;
您可以在bison文件中定义令牌类型:
%union{ char *string; } %token var
然后更换
return(var);
同
yylval.string=malloc(yyleng); sprintf(yylval.string,"%s",yytext);return var;