Facebook
From Bistre Tapir, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 41
  1. %{
  2. #include <stdio.h>
  3. extern FILE* yyin;
  4. extern char* yytext;
  5. extern int yylineno;
  6. %}
  7. %token ID TIP BGIN END ASSIGN NR OPERATOR CONST
  8. %token PLUS MINUS INMULTIRE IMPARTIRE
  9. %start progr
  10. %%
  11.  
  12. progr: declaratii bloc {printf("program corect sintactic\n");}
  13.      ;
  14.  
  15. declaratii :  declaratie ';'
  16.            | declaratii declaratie ';'
  17. declaratie : TIP secventa
  18.            | CONST TIP secventa
  19.            | TIP ID '(' lista_param ')'
  20.            | TIP ID '(' ')'
  21.            ;
  22. secventa   : secventa ',' rez
  23.            | rez
  24.            ;
  25. rez        : ID
  26.            | ID ASSIGN expresie
  27.            ;
  28.  
  29. expresie   : expresie PLUS expresie
  30.            | expresie MINUS expresie
  31.            | expresie INMULTIRE expresie
  32.            | expresie IMPARTIRE expresie
  33.            | '(' expresie ')'
  34.            | ID
  35.            | NR
  36.            ;
  37.  
  38. lista_param : param
  39.             | lista_param ','  param
  40.             ;
  41.            
  42. param : TIP ID
  43.       ;
  44.      
  45. /* bloc */
  46. bloc : BGIN list END  
  47.      ;
  48.      
  49. /* lista instructiuni */
  50. list :  statement ';'
  51.      |  list statement ';'
  52.      ;
  53.  
  54. /* instructiune */
  55. statement: ID ASSIGN expresie
  56.          | ID '(' lista_apel ')'
  57.          ;
  58.        
  59. lista_apel : expresie
  60.            | lista_apel ',' expresie
  61.            ;
  62. %%
  63. void yyerror(char * s){
  64. printf("eroare: %s la linia:%d\n",s,yylineno);
  65. }
  66.  
  67. int main(int argc, char** argv){
  68. yyin=fopen(argv[1],"r");
  69. yyparse();
  70. }