Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. %{
  2.         #include <math.h>
  3.         #include <stdio.h>
  4. %}
  5.  
  6. %error-verbose
  7.    
  8. %union
  9. {
  10.     double dreal;
  11.     int dint;
  12. }
  13.        
  14. %token <dint> NUMAR_INTREG
  15. %token <dreal> NUMAR_REAL
  16. %token CITESTE AFISEAZA VARIABILA INCLUDEE INTREG STRUCT REAL SIR_CARACTERE START STOP PENTRU COS SIN TAN ABSOLUT
  17. %token EXECUTA CATTIMP OPERANDCOND DACA ATUNCI ALTFEL SIRC PUTERE RADICAL SWITCH CASE
  18. %token '-' '+'
  19.  
  20. %left '-' '+'
  21. %left '*' '/'
  22. %left '(' ')'
  23. %nonassoc UMINUS
  24.  
  25. %%
  26.         program: incl '\n' START sir_intrare STOP '\n'
  27.         ;
  28.  
  29.         incl: INCLUDEE VARIABILA '.' VARIABILA  
  30.             |incl '\n'  INCLUDEE VARIABILA '.' VARIABILA
  31.         ;
  32.            
  33.         sir_intrare: /*nimic*/
  34.                 |sir_intrare linie
  35.         ;
  36.         linie: '\n'
  37.                 |VARIABILA
  38.                 |INSTRUCTIUNE
  39.                 |DECLARATIE_VARIABILA
  40.                 |DECLARATIE_STRUCT
  41.         ;
  42.  
  43.         DECLARATIE_STRUCT: STRUCT VARIABILA '\n' '{' '\n' BLOC_STRUCT  '}' ';' '\n';
  44.         ;
  45.  
  46.         BLOC_STRUCT: BLOC_STRUCT DECLARATIE_VARIABILA
  47.                                 |DECLARATIE_VARIABILA
  48.         ;
  49.  
  50.         EXPRESIE: NUMAR
  51.                 |VARIABILA
  52.                 |'-' EXPRESIE %prec UMINUS
  53.                 |APELFUNCTIE
  54.                 |EXPRESIE '+' EXPRESIE
  55.                 |EXPRESIE '-' EXPRESIE
  56.                 |EXPRESIE '*' EXPRESIE
  57.                 |EXPRESIE '/' EXPRESIE
  58.                 |'(' EXPRESIE ')'
  59.         ;
  60.  
  61.         NUMAR: NUMAR_INTREG
  62.                 |NUMAR_REAL
  63.         ;
  64.  
  65.         VAR: VARIABILA ',' VAR
  66.             |VARIABILA
  67.         ;
  68.  
  69.         INITVARI: NUMAR_INTREG ',' VAR
  70.             |NUMAR_INTREG
  71.             |NUMAR_INTREG ',' VAR '=' INITVARI
  72.         ;
  73.  
  74.         INITVARR: NUMAR_REAL ',' VAR
  75.             |NUMAR_REAL
  76.             |NUMAR_REAL ',' VAR '=' INITVARR
  77.         ;
  78.  
  79.         INITVARC: SIR_CARACTERE ',' VAR
  80.             |SIR_CARACTERE
  81.             |SIR_CARACTERE ',' VAR '=' INITVARR
  82.         ;
  83.  
  84.         INITVECT: VARIABILA
  85.             |NUMAR_INTREG
  86.         ;
  87.  
  88.         VARI: /*nimic*/
  89.             |',' VAR
  90.             |',' VAR '[' INITVECT ']' VARI
  91.             |',' VAR '[' INITVECT ']' '[' INITVECT ']' VARI
  92.         ;
  93.  
  94.         DECLARATIE_VARIABILA: INTREG VAR ';' '\n' {printf("Declaratie variabila -int- \n");}
  95.                                                 |INTREG VAR '=' INITVARI ';' '\n' {printf("Declaratie variabila -int- si initializare \n");}
  96.                                                 |INTREG VAR '[' INITVECT ']' VARI ';' '\n' {printf("Declaratie vector numere intregi\n");}
  97.                                                 |INTREG VAR '[' INITVECT ']' '[' INITVECT ']' VARI ';' '\n' {printf("Declaratie matrice numere intregi\n");}
  98.                                                 |REAL VAR ';' '\n' {printf("Declaratie variabila -real- \n");}
  99.                                                 |REAL VAR '=' INITVARR ';' '\n' {printf("Declaratie variabila -real- si initializare \n");}
  100.                                                 |REAL VAR '[' INITVECT ']' VARI ';' '\n' {printf("Declaratie vector numere reale\n");}
  101.                                                 |REAL VAR '[' INITVECT ']' '[' INITVECT ']' VARI ';' '\n' {printf("Declaratie matrice numere reale\n");}
  102.                                                 |SIRC VAR ';' '\n' {printf("Declaratie -sir de caractere-\n");}
  103.                                                 |SIRC VAR '=' INITVARC ';' '\n' {printf("Declaratie variabila -caracter- si initializare \n");}
  104.                                                 |SIRC VAR '[' INITVECT ']' VARI ';' '\n' {printf("Declaratie vector de sir caractere-\n");}
  105.                                                 |SIRC VAR '[' INITVECT ']' '[' INITVECT ']' VARI ';' '\n' {printf("Declaratie matrice de sir caractere-\n");}
  106.         ;
  107.  
  108.         I_DACA: DACA CONDITIE ATUNCI '\n' INSTRUCTIUNI ALTFEL '\n' INSTRUCTIUNI '@' '\n'
  109.                 |DACA CONDITIE ATUNCI '\n' INSTRUCTIUNI '@' '\n'
  110.         ;
  111.  
  112.         I_PENTRU: PENTRU VARIABILA '=' EXPRESIE ',' EXPRESIE ',' EXPRESIE EXECUTA '\n' INSTRUCTIUNI '@'
  113.         ;
  114.  
  115.         I_CATTIMP: CATTIMP CONDITIE EXECUTA '\n' INSTRUCTIUNI '@' '\n'
  116.         ;
  117.  
  118.         I_EXECCATTIMP: EXECUTA '\n' INSTRUCTIUNI CATTIMP CONDITIE ';' '\n' '@'
  119.         ;
  120.  
  121.         I_ATRIBUIRE: VARIABILA '=' EXPRESIE ';' '\n'
  122.                 |VARIABILA '=' SIR_CARACTERE ';' '\n'
  123.         ;
  124.  
  125.         I_SWITCH: SWITCH VARIABILA '\n' '{' '\n' CASEC '}' '\n' '@'
  126.         ;
  127.  
  128.         CASEC: CASEC CASE NUMAR_INTREG ':' '\n' INSTRUCTIUNI
  129.                 |CASE NUMAR_INTREG ':' '\n' INSTRUCTIUNI
  130.         ;
  131.  
  132.         INSTRUCTIUNI: INSTRUCTIUNE
  133.                 |'{' '\n' BLOC_INSTRUCTIUNI '}' '\n'
  134.         ;
  135.  
  136.         BLOC_INSTRUCTIUNI: BLOC_INSTRUCTIUNI INSTRUCTIUNE
  137.                 |INSTRUCTIUNE
  138.         ;
  139.  
  140.         INSTRUCTIUNE: CITESTE lista_var ';' '\n' {printf("Citeste variabila \n");}
  141.                 |AFISEAZA lista_val ';' '\n' {printf("Afisarea \n");}
  142.                 |I_PENTRU '\n' {printf("Instructiunea pentru \n");}
  143.                 |I_CATTIMP {printf("Instructiunea cat-timp \n");}
  144.                 |I_DACA {printf("Instructiunea daca \n");}
  145.                 |I_ATRIBUIRE {printf("Instructiunea atribuire \n");}
  146.                 |I_EXECCATTIMP {printf("Instructiunea executa cat-timp \n");}
  147.                 |I_SWITCH {printf("Instructiunea switch \n");}
  148.         ;
  149.  
  150.         CONDITIE: EXPRESIE OPERANDCOND EXPRESIE
  151.         ;
  152.  
  153.         APELFUNCTIE: RADICAL '(' EXPRESIE ')'
  154.                 |PUTERE '(' EXPRESIE ',' EXPRESIE ')'
  155.                 |ABSOLUT '(' EXPRESIE ')'
  156.                 |COS '(' EXPRESIE ')'  
  157.                 |SIN '(' EXPRESIE ')'
  158.                 |TAN '(' EXPRESIE ')'
  159.         ;
  160.  
  161.         lista_val: lista_val ',' VARIABILA {printf("variabila \n");}
  162.                 |lista_val ',' SIR_CARACTERE {printf("sir caractere \n");}
  163.                 |VARIABILA {printf("plus variabila \n");}
  164.                 |SIR_CARACTERE {printf("plus sir caractere \n");}
  165.         ;
  166.  
  167.         lista_var: lista_var ',' VARIABILA {printf("lista_var->variabila \n");}
  168.                 |VARIABILA {printf("citeste variabila \n");}
  169. %%
  170.  
  171. int yyerror(char *s)
  172. {
  173.     printf("Eroare sintactica: %s",s);
  174.     return 0;
  175. }
  176.  
  177. int main( int argc, char *argv[] )
  178. {
  179.     extern FILE *yyin;
  180.     yyin = fopen( argv[1], "r" );
  181.     yyparse ();
  182.     return 0;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement