%{ #include #include typedef struct N{ int comp,soma; } Ns; %} %union{ int valn; char *vals; Ns valNs; } %token NOTAS %token num %token nome %type Nums %% Lista : {cabec();} NOTAS Alunos '.' {rodape();} ; Aluno : nome '(' Nums ')' {linha($1,(float)$3.soma/$3.comp);} ; Alunos : Aluno | Alunos ';' Aluno ; Nums : num {$$.comp = 1; $$.soma = $1; } | Nums ',' num {$$.comp += $1.comp; $$.soma = $1.soma + $3; } ; %% void cabec() { printf("\n\"Notas\"\n\n"); } void rodape() {printf("\n\n"); } void linha(char ªn, float media) { printf("A media das notas do %10s e: %5.2f
\n",n,media); } int yyerror(char *s) { fprintf(stderr, "ERRO: %s \n", s); } int main() { yyparse(); return(0); }