1

我有一个在 linux ubuntu vmPlayer 上工作的 bison-flex 项目,由于某种原因,我有一个警告我无法下车。这是我文件的开头,我的程序(extra.y 是 bison 文件)确实启动了用“线”:

%{   
   #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"

搜索我已经看到:Bison 语法警告 ,但它仍然给我那个警告.. ..HELP??

4

3 回答 3

2

终于找到了。

%name parse之前添加%token

例如:

%name parse
%token NUM

(来自:https ://bdhacker.wordpress.com/2012/05/05/flex-bison-in-ubuntu/#comment-2669 )

于 2017-02-09T14:42:21.693 回答
1

您没有使用bison; 你正在使用bison++. 你应该在你的问题中明确这一点,因为它确实会有所作为。

您收到的警告信息是正常的bison++;您可以通过显式声明解析器类名来避免它。

man bison++(假设文档已正确安装):

%name parser_name
声明此解析器的名称。C++ 类名称的用户,并使许多名称唯一。默认是解析。必须在 and 之前给出%union%define或者从不给出。

于 2016-12-12T17:09:51.397 回答
-1

你错过了一个';' 之后%union {}

%union {
};
于 2016-12-11T14:57:12.580 回答