如何在Lex和Yacc中对String进行标记

时间:2014-03-22 10:48:14

标签: c yacc lex

参考Reading new line giving syntax error in LEX YACC  我们正在使用的lex文件

 %{
        /*
            parser for ssa;
        */

    #include<stdio.h>
    #include<stdlib.h>
    #include"y.tab.h"


    %}
    %%
    [\t]+   ;
    \n  ;



    [if]+       printf("first input\n");
    [else]+     return(op);
    [=]+        return(equal);
    [+]+        return(op);
    [*]+        return(op);
    [-]+        return(op);

    [\<][b][b][ ]+[1-9][\>] {return(bblock);}

    ([[_][a-z]])|([a-z][_][0-9]+)|([0-9]+)  {return(var);}

    .   ;




    %%

如果我想将令牌作为字符串,即a_2,我该怎么办? 怎么做????

输入文件是

a_2 = _6 + b_3; 
  a_8 = b_7 - c_5;

1 个答案:

答案 0 :(得分:1)

您可以在野牛文件中定义令牌类型:

%union{
 char *string;
}

%token <string> var

然后替换

return(var);

yylval.string=malloc(yyleng); sprintf(yylval.string,"%s",yytext);return var;