Я тренируюсь с Бизоном и Флексом. Моя цель - создать парсер языка строк палиндрома. Это мой очень простой .l
файл:
%{
#include <stdio.h>
#include <string.h>
#include "G1.tab.h"
%}
%%
"a" { return (A);}
"b" { return (B);}
%%
И это мой .y
файл:
%{
#include <stdio.h>
int yylex();
int yyerror(char *s);
%}
%token A B
%%
prog:
srule
;
srule
: A srule A
| B srule B
| A A
| B B
| A
| B
;
%%
int yyerror(char *s){
printf("\nParsing result: %s\n\n", s);
return 0;
}
int main()
{
int parse = yyparse();
if(parse == 0) printf("\nParsing result: SUCCESS\n\n");
return 0;
}
Когда я пытаюсь ababbbbaba
или baabaaaaabaab
, которые являются правильными строки возвращает синтаксическую ошибку. Я думаю, что, возможно, есть проблема с грамматикой, но, выполняя тот же эксперимент с Antlr, он работает.
Теперь я знаю, что Antlr работает сверху вниз, а Bison Bottom-Up, но это не может быть проблема. Может кто-нибудь объяснить мне проблему? Спасибо.