所以,我对flex / bison很新,但是我需要编写这个解析器来识别一个简单的整数计算器,而且我很难让flex和bison相互交谈。
Flex会像它应该的那样返回令牌值,但我无法让它真正返回语义值。这是我的flex文件:
%option noyywrap
%{
#include "test_Calc_Answer.tab.h"
#include <malloc.h>
#include <process.h>
#define fileno _fileno
%}
NUM [0-9]
%%
"{"[\^{}}]*"}"
[ \t]+
[\n] {
return (int)'\n';
}
"+" {
return (int)'+';
}
"-" {
return (int)'-';
}
"*" {
return (int)'*';
}
"/" {
return (int)'/';
}
{NUM}+ {
int i, value = 0;
for(i = yyleng-1; i>=0; i--)
value = 10*value + ( yytext[i] - '0' );
yyval = value;
return DIGIT;
}
%%
当我尝试编译生成的代码时,我收到'yyval unclared'错误。我注意到它在* .tab.h文件中声明,所以我无法理解问题是什么。 告诉我是否需要提供其他信息......
谢谢,抱歉我的noobness或者我再问一个问题。
答案 0 :(得分:3)
词汇值的变量通常称为 yylval 而不是 yyval ,因此几乎可以肯定调用* .tab.h中的变量。< / p>