我有一个在Linux ubuntu vmplayer上工作的Bison-Flex项目,由于某些原因,我有一个警告,我无法下车..这是文件的开始,我程序(Extra.y是野牛文件)确实以"行"开头:
%{
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <iostream>
#include <map>
#include <math.h>
#include <algorithm>
int yylex();
void yyerror(const char*)
char dollarOrWave=' ';
%}
%left OR
%left AND
%union {
int int_val;
char* str_val;
} //THIS IS LINE 70 !!
%token<int_val> T_INT
%token<str_val> STREXP
%type<int_val> expr
%type<str_val> stringExp
%start lines
%%
lines:
line { }//checkDollars(); }//checkDollars(); }
| lines line { checkDollars(); numStringVarsFlag=0; }
;
警告:
extra.y:70 parser name defined to default :"parse"
搜索我已经看到了:野牛语法警告,但它仍然给我警告。..help ??
最终找到了它。
在%token
%name parse
eg:
%name parse
%token NUM
(来自:https://bdhacker.wordpress.com/2012/05/05/flex-bison-in-in-wubuntu/#comment-2669)
您不使用 bison
;您正在使用bison++
。您应该在问题中清楚地表明这一点,因为它确实有所作为。
您收到的警告消息在bison++
中是正常的;您可以通过明确声明解析器类名来避免它。
来自man bison++
(假设文档已正确安装):
%name parser_name
声明此解析器的名称。C 类名称的用户,并使许多名称唯一。默认是分析。必须在%union
和%define
之前给出。
您缺少A';'%union {}
之后。
%union {
};