%{ #include #include "grove.h" #define YYERROR_VERBOSE(a) zbr int nlines; int to_what; extern char* yytext; %} %union { Elem * el; GHashTable * hash; char* str; GString* gstr; } %type Text %type ParaList %type BibItem %type AutorList %type BibItemList %type Bibliografia %type ParaConteudo %type ParaConteudoList %type Capitulo %type Data %type Agradecimentos %type CapList %type Abertura %type Email %type Url %type Comando %type Conteudo %type Corpo %type ConteudoList %type Lista %type Item %type ListaItem %type Grafico %type Realcado %type Chave %type Autor %type Autor2 %type Fecho %type Nome %type Resumo %type Exemplo %type Titulo %type CodPrograma %type Figura %type Pub %type ExemploConteudo %type Fecho %type ExemploConteudoList %type Ref %type Para %type Seccao %type PLI_doc %type AtriList %token texto %token id %token valor %token PLI_DOC ABERTURA TITULO DATA AUTOR NOME EMAIL URL RESUMO %token REALCADO REF GRAFICO CODPROGRAMA LISTA ITEM EXEMPLO %token FECHO AGRADECIMENTOS BIBLIOGRAFIA BIBITEM %token CHAVE CORPO CAPITULO SECCAO PARA COMANDO PUB FIGURA %start PLI_doc %% PLI_doc : '<' PLI_DOC AtriList '>' {$$ = Elem_new(PLI_DOC,$3,nlines);} Abertura Corpo Fecho '<' '/' PLI_DOC '>' { $7 = Set_next($7,$8); $6 = Set_next($6,$7); $$ = Set_content($5,$6); if (to_what > 0) _travessia_Html($$); else if (to_what==0) _travessia_Esis($$); else _travessia_Latex($$); } Abertura : '<' ABERTURA AtriList '>' {$$ = Elem_new(ABERTURA,$3,nlines);} Titulo Data AutorList Resumo '<' '/' ABERTURA '>' { $8=Elem_insert($8,$9); $7 = Set_next($7,$8); $6 = Set_next($6,$7); $$ = Set_content($5,$6);} Titulo : '<' TITULO AtriList '>' { $$ = Elem_new(TITULO,$3,nlines);} Text '<' '/' TITULO '>' { $$ = Set_content($5,$6);} Data : '<' DATA AtriList '>' {$$ = Elem_new(DATA,$3,nlines);} Text '<' '/' DATA '>' { $$ = Set_content($5,$6);} AutorList : AutorList Autor {$$ = Elem_insert($1,$2);} | {$$ = NULL;} Autor : '<' AUTOR AtriList '>' { $$ = Elem_new(AUTOR,$3,nlines);} Autor2 {$$ = Set_content($5,$6);} Autor2 : Nome '<' '/'AUTOR '>' { $$ = $1;} | Nome Email '<' '/'AUTOR '>' { $1 = Set_next($1,$2); $$ = $1;} | Nome Url '<' '/'AUTOR '>' { $1 = Set_next($1,$2); $$ = $1; } | Nome Email Url '<' '/'AUTOR '>' { $2 = Set_next($2,$3); $1 = Set_next($1,$2); $$ = $1;} Nome : '<' NOME AtriList '>' {$$ = Elem_new(NOME,$3,nlines);} Text '<' '/' NOME '>' { $$ = Set_content($5,$6);} Email : '<' EMAIL AtriList '>' {$$ = Elem_new(EMAIL,$3,nlines);} Text '<' '/' EMAIL'>' { $$ = Set_content($5,$6);} Url : '<' URL AtriList '>' {$$ = Elem_new(URL,$3,nlines);} Text '<' '/' URL '>' { $$ = Set_content($5,$6);} Resumo : '<' RESUMO AtriList '>' {$$ = Elem_new(RESUMO,$3,nlines);} ParaList '<''/' RESUMO '>' { $$ = Set_content($5,$6);} Fecho : '<' FECHO AtriList '>' {$$ = Elem_new(FECHO,$3,nlines);} Agradecimentos Bibliografia '<' '/' FECHO '>' { $6 = Set_next($6,$7); $$ = Set_content($5,$6);} Agradecimentos : '<'AGRADECIMENTOS AtriList '>' {$$ = Elem_new(AGRADECIMENTOS,$3,nlines);} ParaList '<''/'AGRADECIMENTOS'>' { $$ = Set_content($5,$6);} Bibliografia : '<'BIBLIOGRAFIA AtriList '>' {$$ = Elem_new(BIBLIOGRAFIA,$3,nlines); } BibItemList '<' '/' BIBLIOGRAFIA '>' { $$ = Set_content($5,$6);} BibItemList : BibItemList BibItem {$$ = Elem_insert($1,$2);} | {$$ = NULL;} BibItem : '<' BIBITEM AtriList '>' {$$ = Elem_new(BIBITEM,$3,nlines);} Chave Pub '<' '/' BIBITEM '>' { $6 = Set_next($6,$7); $$ = Set_content($5,$6);} Chave : '<' CHAVE AtriList '>' {$$ = Elem_new(CHAVE,$3,nlines);} Text '<' '/' CHAVE '>' { $$ = Set_content($5,$6);} Corpo : '<' CORPO AtriList '>' {$$ = Elem_new(CORPO,$3,nlines);} CapList '<' '/' CORPO '>' { $$ = Set_content($5,$6);} Pub : '<' PUB AtriList '>' {$$ = Elem_new(PUB,$3,nlines);}Text '<' '/' PUB '>' { $$ = Set_content($5,$6);} CapList : CapList Capitulo {$$ = Elem_insert($1,$2);} | {$$ = NULL;} Capitulo : '<' CAPITULO AtriList '>' {$$ = Elem_new(CAPITULO,$3,nlines);} Titulo ConteudoList '<' '/' CAPITULO '>' { $6 = Set_next($6,$7); $$ = Set_content($5,$6); } ConteudoList : ConteudoList Conteudo {$$ = Elem_insert($1,$2);} | {$$ = NULL;} Conteudo : Para {$$ = $1;} | Seccao {$$ = $1;} | Exemplo {$$ = $1;} | Figura {$$ = $1;} | Lista {$$ = $1;} | CodPrograma {$$ = $1;} Seccao : '<' SECCAO AtriList '>' {$$ = Elem_new(SECCAO,$3,nlines);} Titulo ConteudoList '<' '/'SECCAO '>' { $6 = Set_next($6,$7); $$ = Set_content($5,$6);} ParaList : ParaList Para {$$ = Elem_insert($1,$2);} | {$$ = NULL;} Para : '<' PARA AtriList '>' {$$ = Elem_new(PARA,$3,nlines);} ParaConteudoList '<' '/' PARA '>' { $$ = Set_content($5,$6);} ParaConteudoList: ParaConteudoList ParaConteudo {$$ = Elem_insert($1,$2);} | {$$=NULL;} ParaConteudo : Text {$$ = $1;} | Comando {$$ = $1;} | Realcado {$$ = $1;} | Ref {$$ = $1;} Comando : '<' COMANDO AtriList '>' {$$ = Elem_new(COMANDO,$3,nlines);} Text '<' '/' COMANDO '>' { $$ = Set_content($5,$6);} Realcado : '<' REALCADO AtriList '>' {$$ = Elem_new(REALCADO,$3,nlines);} Text '<' '/' REALCADO '>' { $$ = Set_content($5,$6);} Ref : '<' REF AtriList '/' '>' { $$ = Elem_new(REF,$3,nlines);} Figura : '<' FIGURA AtriList '>' {$$ = Elem_new(FIGURA,$3,nlines);} Titulo Grafico '<' '/' FIGURA '>' { $6 = Set_next($6,$7); $$ = Set_content($5,$6);} Grafico : '<' GRAFICO AtriList '/' '>' { $$ = Elem_new(GRAFICO,$3,nlines);} CodPrograma : '<' CODPROGRAMA AtriList '>' {$$ = Elem_new(CODPROGRAMA,$3,nlines);} Text '<' '/' CODPROGRAMA '>' { $$ = Set_content($5,$6);} Lista : '<' LISTA AtriList '>' {$$ = Elem_new(LISTA,$3,nlines);} ListaItem '<' '/'LISTA '>' { $$ = Set_content($5,$6);} ListaItem : ListaItem Item {$$ = Elem_insert($1,$2);} | {$$ = NULL;} Item : '<' ITEM AtriList '>' {$$ = Elem_new(ITEM,$3,nlines);} ParaList '<' '/' ITEM '>' { $$ = Set_content($5,$6);} Exemplo : '<' EXEMPLO AtriList '>' {$$ = Elem_new(EXEMPLO,$3,nlines);} Titulo ExemploConteudoList '<' '/' EXEMPLO '>' { $6 = Set_next($6,$7); $$ = Set_content($5,$6);} ExemploConteudoList : ExemploConteudoList ExemploConteudo { $$ = Elem_insert($1,$2);} | {$$ = NULL;} ExemploConteudo : Para {$$ = $1} | Figura {$$ = $1} | CodPrograma {$$ = $1} Text: texto {$$ = Elem_texto_new($1); } AtriList : AtriList id '=' valor { char *pt; pt = strrchr($4,'"'); *pt = '\0'; g_hash_table_insert($1,g_string_down(g_string_new($2)),g_string_new(&$4[1])); $$ = $1;} | {$$ = g_hash_table_new(Gstr2int,Compgstr);} %% int yyerror(char* msg) { g_warning("line: %d,%s and found text '%s'",nlines,msg,yytext); exit(1); }