flex'yyval'未宣布

时间:2013-02-05 10:56:56

标签: c bison yacc flex-lexer

所以,我对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或者我再问一个问题。

1 个答案:

答案 0 :(得分:3)

词汇值的变量通常称为 yylval 而不是 yyval ,因此几乎可以肯定调用* .tab.h中的变量。< / p>