Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- #include <math.h>
- #include <stdio.h>
- %}
- %error-verbose
- %union
- {
- double dreal;
- int dint;
- }
- %token <dint> NUMAR_INTREG
- %token <dreal> NUMAR_REAL
- %token CITESTE AFISEAZA VARIABILA INCLUDEE INTREG STRUCT REAL SIR_CARACTERE START STOP PENTRU COS SIN TAN ABSOLUT
- %token EXECUTA CATTIMP OPERANDCOND DACA ATUNCI ALTFEL SIRC PUTERE RADICAL SWITCH CASE
- %token '-' '+'
- %left '-' '+'
- %left '*' '/'
- %left '(' ')'
- %nonassoc UMINUS
- %%
- program: incl '\n' START sir_intrare STOP '\n'
- ;
- incl: INCLUDEE VARIABILA '.' VARIABILA
- |incl '\n' INCLUDEE VARIABILA '.' VARIABILA
- ;
- sir_intrare: /*nimic*/
- |sir_intrare linie
- ;
- linie: '\n'
- |VARIABILA
- |INSTRUCTIUNE
- |DECLARATIE_VARIABILA
- |DECLARATIE_STRUCT
- ;
- DECLARATIE_STRUCT: STRUCT VARIABILA '\n' '{' '\n' BLOC_STRUCT '}' ';' '\n';
- ;
- BLOC_STRUCT: BLOC_STRUCT DECLARATIE_VARIABILA
- |DECLARATIE_VARIABILA
- ;
- EXPRESIE: NUMAR
- |VARIABILA
- |'-' EXPRESIE %prec UMINUS
- |APELFUNCTIE
- |EXPRESIE '+' EXPRESIE
- |EXPRESIE '-' EXPRESIE
- |EXPRESIE '*' EXPRESIE
- |EXPRESIE '/' EXPRESIE
- |'(' EXPRESIE ')'
- ;
- NUMAR: NUMAR_INTREG
- |NUMAR_REAL
- ;
- VAR: VARIABILA ',' VAR
- |VARIABILA
- ;
- INITVARI: NUMAR_INTREG ',' VAR
- |NUMAR_INTREG
- |NUMAR_INTREG ',' VAR '=' INITVARI
- ;
- INITVARR: NUMAR_REAL ',' VAR
- |NUMAR_REAL
- |NUMAR_REAL ',' VAR '=' INITVARR
- ;
- INITVARC: SIR_CARACTERE ',' VAR
- |SIR_CARACTERE
- |SIR_CARACTERE ',' VAR '=' INITVARR
- ;
- INITVECT: VARIABILA
- |NUMAR_INTREG
- ;
- VARI: /*nimic*/
- |',' VAR
- |',' VAR '[' INITVECT ']' VARI
- |',' VAR '[' INITVECT ']' '[' INITVECT ']' VARI
- ;
- DECLARATIE_VARIABILA: INTREG VAR ';' '\n' {printf("Declaratie variabila -int- \n");}
- |INTREG VAR '=' INITVARI ';' '\n' {printf("Declaratie variabila -int- si initializare \n");}
- |INTREG VAR '[' INITVECT ']' VARI ';' '\n' {printf("Declaratie vector numere intregi\n");}
- |INTREG VAR '[' INITVECT ']' '[' INITVECT ']' VARI ';' '\n' {printf("Declaratie matrice numere intregi\n");}
- |REAL VAR ';' '\n' {printf("Declaratie variabila -real- \n");}
- |REAL VAR '=' INITVARR ';' '\n' {printf("Declaratie variabila -real- si initializare \n");}
- |REAL VAR '[' INITVECT ']' VARI ';' '\n' {printf("Declaratie vector numere reale\n");}
- |REAL VAR '[' INITVECT ']' '[' INITVECT ']' VARI ';' '\n' {printf("Declaratie matrice numere reale\n");}
- |SIRC VAR ';' '\n' {printf("Declaratie -sir de caractere-\n");}
- |SIRC VAR '=' INITVARC ';' '\n' {printf("Declaratie variabila -caracter- si initializare \n");}
- |SIRC VAR '[' INITVECT ']' VARI ';' '\n' {printf("Declaratie vector de sir caractere-\n");}
- |SIRC VAR '[' INITVECT ']' '[' INITVECT ']' VARI ';' '\n' {printf("Declaratie matrice de sir caractere-\n");}
- ;
- I_DACA: DACA CONDITIE ATUNCI '\n' INSTRUCTIUNI ALTFEL '\n' INSTRUCTIUNI '@' '\n'
- |DACA CONDITIE ATUNCI '\n' INSTRUCTIUNI '@' '\n'
- ;
- I_PENTRU: PENTRU VARIABILA '=' EXPRESIE ',' EXPRESIE ',' EXPRESIE EXECUTA '\n' INSTRUCTIUNI '@'
- ;
- I_CATTIMP: CATTIMP CONDITIE EXECUTA '\n' INSTRUCTIUNI '@' '\n'
- ;
- I_EXECCATTIMP: EXECUTA '\n' INSTRUCTIUNI CATTIMP CONDITIE ';' '\n' '@'
- ;
- I_ATRIBUIRE: VARIABILA '=' EXPRESIE ';' '\n'
- |VARIABILA '=' SIR_CARACTERE ';' '\n'
- ;
- I_SWITCH: SWITCH VARIABILA '\n' '{' '\n' CASEC '}' '\n' '@'
- ;
- CASEC: CASEC CASE NUMAR_INTREG ':' '\n' INSTRUCTIUNI
- |CASE NUMAR_INTREG ':' '\n' INSTRUCTIUNI
- ;
- INSTRUCTIUNI: INSTRUCTIUNE
- |'{' '\n' BLOC_INSTRUCTIUNI '}' '\n'
- ;
- BLOC_INSTRUCTIUNI: BLOC_INSTRUCTIUNI INSTRUCTIUNE
- |INSTRUCTIUNE
- ;
- INSTRUCTIUNE: CITESTE lista_var ';' '\n' {printf("Citeste variabila \n");}
- |AFISEAZA lista_val ';' '\n' {printf("Afisarea \n");}
- |I_PENTRU '\n' {printf("Instructiunea pentru \n");}
- |I_CATTIMP {printf("Instructiunea cat-timp \n");}
- |I_DACA {printf("Instructiunea daca \n");}
- |I_ATRIBUIRE {printf("Instructiunea atribuire \n");}
- |I_EXECCATTIMP {printf("Instructiunea executa cat-timp \n");}
- |I_SWITCH {printf("Instructiunea switch \n");}
- ;
- CONDITIE: EXPRESIE OPERANDCOND EXPRESIE
- ;
- APELFUNCTIE: RADICAL '(' EXPRESIE ')'
- |PUTERE '(' EXPRESIE ',' EXPRESIE ')'
- |ABSOLUT '(' EXPRESIE ')'
- |COS '(' EXPRESIE ')'
- |SIN '(' EXPRESIE ')'
- |TAN '(' EXPRESIE ')'
- ;
- lista_val: lista_val ',' VARIABILA {printf("variabila \n");}
- |lista_val ',' SIR_CARACTERE {printf("sir caractere \n");}
- |VARIABILA {printf("plus variabila \n");}
- |SIR_CARACTERE {printf("plus sir caractere \n");}
- ;
- lista_var: lista_var ',' VARIABILA {printf("lista_var->variabila \n");}
- |VARIABILA {printf("citeste variabila \n");}
- %%
- int yyerror(char *s)
- {
- printf("Eroare sintactica: %s",s);
- return 0;
- }
- int main( int argc, char *argv[] )
- {
- extern FILE *yyin;
- yyin = fopen( argv[1], "r" );
- yyparse ();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement