所以,我对 flex/bison 很陌生,但我需要编写这个解析器来识别一个简单的整数计算器,我在让 flex 和 bison 相互交谈时遇到了麻烦。
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 undeclared”错误。我注意到它是在 *.tab.h 文件中声明的,所以我无法理解问题可能是什么。告诉我是否需要提供其他信息...
谢谢,对不起我的菜鸟或者我重新问了一个问题。