解析器名称定义为默认值:%start 后"parse"警告野牛

parser name defined to default :"parse" warning bison after %start

本文关键字:%start parse 警告 默认值 定义      更新时间:2023-10-16

我有一个在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 {
};