У меня есть проект 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"
В поисках я видел это: Предупреждения о бизонной грамматике но это все еще дает мне это предупреждение ..
..ПОМОГИТЕ??
Вы не используете bison
; ты используешь bison++
, Вы должны четко указать это в своем вопросе (ах), потому что это действительно имеет значение.
Предупреждающее сообщение, которое вы получаете, является нормальным в bison++
; Вы можете избежать этого, явно объявив имя класса анализатора.
От man bison++
(при условии, что документация установлена правильно):
%name parser_name
Объявите имя этого парсера. Пользователь для имени класса C ++, и для отображения многих имен уникальными. по умолчанию это синтаксический анализ. Должен быть дан раньше%union
а также%define
или никогда.
Наконец то нашел.
добавлять %name parse
до %token
Например:
%name parse
%token NUM
(От: https://bdhacker.wordpress.com/2012/05/05/flex-bison-in-ubuntu/#comment-2669)
Вы пропускаете ‘;’ после %union {}
,
%union {
};