Имя синтаксического анализатора, определенное по умолчанию: предупреждение "parse" bison после%start

У меня есть проект bison-flex, работающий над linux ubuntu vmPlayer, и по какой-то причине у меня появляется предупреждение, что я не могу выйти... это начало моего файла, и моя программа (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"

В поисках я видел это: предупреждения о грамматике бизонов, но они все еще дают мне это предупреждение....Помощь??

3 ответа

Наконец то нашел.

добавлять %name parse до %token

Например:

%name parse
%token NUM

(От: https://bdhacker.wordpress.com/2012/05/05/flex-bison-in-ubuntu/)

Вы не используете bison; ты используешь bison++, Вы должны четко указать это в своем вопросе (ах), потому что это действительно имеет значение.

Предупреждающее сообщение, которое вы получаете, является нормальным в bison++; Вы можете избежать этого, явно объявив имя класса анализатора.

От man bison++ (при условии, что документация установлена ​​правильно):

%name parser_name
Объявите имя этого парсера. Пользователь для имени класса C++, и для отображения многих имен уникальными. по умолчанию это анализ. Должен быть дан раньше %union а также %defineили никогда.

Вы пропускаете ';' после %union {},

%union {
};
Другие вопросы по тегам