我在 yacc 中有这个语法:
%{
#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);
}
在 flex 中:
%{
#include "y.tab.h"
%}
%%
[a-zA-Z]+ return word;
[a-zA-Z ]+ return texto;
\- return '-';
\n return SEP;
[ \t] ;
. return ERRO;
<<EOF>> return '$';
我想做一个有效的解析,例如:
text line
text line
text line
word
-text line
-text line
-text line
word
-text line
其中第一行是“Directivas”,然后是一个空白行,然后是“Conceitos”,其中一个 Conceito 是一个单词,后面是几行以“-”开头的文本行。那些 'Conceitos 由一个空行分隔
但它发现了一个转变/减少冲突..我是新来的,我不知道为什么
对不起我的英语不好
谢谢