%{ /* Prvi deo prvog dela ove datoteke se doslovno prenosi na pocetak y.tab.c fajla, slicno kao i kod lex-a Ovde ukljucujemo neka zaglavlja, definisemo funkciju yyerror i deklarisemo yylex sto je obavezno */ #include #include #include int yyerror(char *str) { fprintf(stderr, "Pojavila se greska: %s\n", str); exit(EXIT_FAILURE); } int yylex(); %} /* Navodimo sve tokene (osim onih jednokarakterskih) kako bi yacc znao sta su neterminali a sta terminali (tokeni) */ %token num %% E : E '+' T | T ; T : num %% /* Leksicki analizator */ int yylex() { int ch = getchar(); switch(ch) { case '+': return '+'; case '\n': case EOF: return 0; } if (isdigit(ch)) { while (isdigit(ch=getchar())) ; ungetc(ch, stdin); return num; } yyerror("Greska pri leksickoj analizi"); return -1; } /* Main funkcija */ int main() { return yyparse(); }