Здравствуйте!Изучаю bison+flex. На данный момент необходимо выводить все слова(буквы,цифры и пробелы), остальное - пропускать. При компиляции бизон выдает ошибку,вида
bison.b:31.29-30: $1 шч `PRINT' эх шьххЄ юяшёрээюую Єшяр
flex.l
%{ // Начало блока, прямо копируемого в результирующий файл
#include <stdio.h>
#include <string.h>
#include "p_bison.hpp" // Файл, содержащий макроопределения сделанные в bison.b
extern YYSTYPE yylval;
%} // Окончание блока, прямо копируемого в результирующий файл
comments \/\*[^*]*\*+([^/*][^*]*\*+)*\/
formating [\n\r\t\f]*
except_spaces [ ]{2,}
word [a-zA-Zа-яА-Я0-9 ]+
%%
{word} {
yylval.str=strdup(yytext);
return T_STRING;
}
.+ // пропускаем остальное
%%
int yywrap() // Функция обработки обнаружения конца файла
{
return(1); // После обнаружения конца файла прекратить парсинг
}
bison.b
%{ // Начало блока, прямо копируемого в результирующий файл
#include <stdio.h>
#include <string.h>
extern int yylex(void); // Объявление внешней функции yylex
void yyerror(char *s); // Объявление функции обработки ошибки
char out_str[255];
%}
%debug
%union
{
char* str;
}
%token <str> T_STRING
%start PRINT
%% // Начало секции определения правил
PRINT:
| STR
{
printf("%s",$1);
}
;
STR:
T_STRING
| STR T_STRING
;
%%
#include <stdio.h>
void yyerror(char *s) // Функция сообщения об ошибке
{
fflush(stdout);
printf("\n%s\n", s);
}