Имя синтаксического анализатора, определенное по умолчанию: & quot; parse & quot; предупреждение бизонов после% начала

У меня есть проект 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"

В поисках я видел это: Предупреждения о бизонной грамматике но это все еще дает мне это предупреждение ..
..ПОМОГИТЕ??

0

Решение

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

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

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

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

1

Другие решения

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

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

Например:

%name parse
%token NUM

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

1

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

%union {
};
-1
По вопросам рекламы [email protected]