%{ #include extern FILE* yyin; extern char* yytext; extern int yylineno; %} %token ID TIP BGIN END ASSIGN NR OPERATOR CONST %token PLUS MINUS INMULTIRE IMPARTIRE %start progr %% progr: declaratii bloc {printf("program corect sintactic\n");} ; declaratii : declaratie ';' | declaratii declaratie ';' declaratie : TIP secventa | CONST TIP secventa | TIP ID '(' lista_param ')' | TIP ID '(' ')' ; secventa : secventa ',' rez | rez ; rez : ID | ID ASSIGN expresie ; expresie : expresie PLUS expresie | expresie MINUS expresie | expresie INMULTIRE expresie | expresie IMPARTIRE expresie | '(' expresie ')' | ID | NR ; lista_param : param | lista_param ',' param ; param : TIP ID ; /* bloc */ bloc : BGIN list END ; /* lista instructiuni */ list : statement ';' | list statement ';' ; /* instructiune */ statement: ID ASSIGN expresie | ID '(' lista_apel ')' ; lista_apel : expresie | lista_apel ',' expresie ; %% void yyerror(char * s){ printf("eroare: %s la linia:%d\n",s,yylineno); } int main(int argc, char** argv){ yyin=fopen(argv[1],"r"); yyparse(); }