1

所以,我对 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 文件中声明的,所以我无法理解问题可能是什么。告诉我是否需要提供其他信息...

谢谢,对不起我的菜鸟或者我重新问了一个问题。

4

1 回答 1

3

词法值的变量通常称为yylval而不是yyval,因此几乎可以肯定 *.tab.h 中的变量被称为。

于 2013-02-05T17:54:49.100 回答