У меня есть эта грамматика в Yacc:сдвиг/свёртка Конфликт в Yacc/Flex
%{
#include <stdio.h>
%}
%token texto SEP ERRO word
%start Ini
%%
Ini: Directivas SEP SEP Conceitos '$'
{ printf("Terminou bem...\n"); return 0; };
Directivas: Directiva
| Directivas SEP Directiva
;
Conceitos: Conceito
| Conceitos SEP SEP Conceito
;
Conceito: word SEP Atributos;
Atributos: Atributo
| Atributos SEP Atributo
;
Directiva: texto;
Atributo: '-' texto;
%%
int main(){
yyparse();
}
int yyerror(char *s){
fprintf(stderr, "%s\n", s);
}
И в гибком:
%{
#include "y.tab.h"
%}
%%
[a-zA-Z]+ return word;
[a-zA-Z ]+ return texto;
\- return '-';
\n return SEP;
[ \t] ;
. return ERRO;
<<EOF>> return '$';
Я хочу сделать парсер, что valids что-то вроде:
text line
text line
text line
word
-text line
-text line
-text line
word
-text line
, где первые строки - это «Директивы», а затем одна пустая строка, а затем «Conceitos», где один Conceito - это одно слово, за которым следует af ew текстовые строки с «-» в начале. эти «Conceitos разделены одной пустой строкой
, но он находит сдвиг/свёртка conflitct .. Я новичок в этом и я не могу понять, почему
Извините за мой английский
Спасибо
Большое спасибо, совет о -v действительно помогает мне !! –
@ chris-dodd: что я могу сделать, если опция '-v' не изменяет результат, и сейчас это просто дает мне количество конфликтов сдвига/уменьшения? – skeggse
@distilledchaos: Опция '-v' создает дополнительный выходной файл (с расширением' .output') с подробной информацией. –