Имя синтаксического анализатора, определенное по умолчанию: предупреждение "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
или никогда.