访问解析器文件中从词法分析器传递的值

时间:2015-08-04 21:58:06

标签: parsing bison yacc lex

我有一个简单的配置文件,如下所示

[main]
e_type=0x1b

在我的lex文件(test.l)中遇到令牌e_type时,我调用以下函数并重新调整T_E_TYPE令牌。

void tag ()  {
    yylval.str = malloc(strlen(yytext)+1);
    strcpy (yylval.str, yytext);
}

在解析器文件(test.y)中,我声明了union如下。

%union {
   char *str;
   unsigned int n;
}

我能够识别[main]e_type,但如果我尝试从yylval.str文件中打印test.y,我会遇到分段错误。

如何在test.y文件中访问从lexer传递的值。

1 个答案:

答案 0 :(得分:0)

与每个令牌对应的yylval的值已被压入堆栈,并且在缩减规则中可用$n作为某些n(右侧的符号)按顺序编号)。您必须声明每个标记的type-tag,以便bison知道要使用的union的哪个成员。