我有一个简单的配置文件,如下所示
[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传递的值。
答案 0 :(得分:0)
与每个令牌对应的yylval
的值已被压入堆栈,并且在缩减规则中可用$n
作为某些n
(右侧的符号)按顺序编号)。您必须声明每个标记的type-tag,以便bison知道要使用的union的哪个成员。