Advertisement
Binkol

parserRh.y

Jan 22nd, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. %{
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. void yyerror(char*);
  6. int yylex();
  7. int line = 1;
  8. int typ_lini; /*char = 0, float = 1, int = 2, double = 3 */
  9.  
  10. %}
  11.  
  12. %union {
  13. char* VAR_NAME;
  14. int TAB_SIZE;
  15. };
  16.  
  17. %start S
  18. %token <VAR_NAME> NAZWA_ZMIENNEJ
  19. %token <TAB_SIZE> LICZBA
  20.  
  21. %token ENDL CHAR FLOAT INT DOUBLE L_NAW P_NAW SREDNIK PRZECINEK GWIAZDKA
  22.  
  23. %%
  24. S : TYP ZMIENNE SREDNIK ENDL S|;
  25.  
  26. ZMIENNE : VAR |
  27. VAR PRZECINEK ZMIENNE;
  28.  
  29. VAR : NAZWA_ZMIENNEJ
  30. {
  31. switch(typ_lini)
  32. {
  33. case 0: printf("zmienna %s, typ char\n",$1); break;
  34. case 1: printf("zmienna %s, typ float\n",$1); break;
  35. case 2: printf("zmienna %s, typ int\n",$1); break;
  36. case 3: printf("zmienna %s, typ double\n",$1); break;
  37. }
  38. }|
  39. GWIAZDKA NAZWA_ZMIENNEJ
  40. {
  41. switch(typ_lini)
  42. {
  43. case 0: printf("zmienna %s, typ char*\n",$2); break;
  44. case 1: printf("zmienna %s, typ float*\n",$2); break;
  45. case 2: printf("zmienna %s, typ int*\n",$2); break;
  46. case 3: printf("zmienna %s, typ double*\n",$2); break;
  47. }
  48. }|
  49. NAZWA_ZMIENNEJ
  50. {
  51. switch(typ_lini)
  52. {
  53. case 0: printf("tablica %s, typ char, rozmiar ",$1); break;
  54. case 1: printf("tablica %s, typ float, rozmiar ",$1); break;
  55. case 2: printf("tablica %s, typ int, rozmiar ",$1); break;
  56. case 3: printf("tablica %s, typ double, rozmiar ",$1); break;
  57. }
  58. }TABLICA |
  59. GWIAZDKA NAZWA_ZMIENNEJ TABLICA ;
  60.  
  61.  
  62. TABLICA : L_NAW LICZBA P_NAW {printf("%d", $2);}|
  63. TABLICA L_NAW LICZBA P_NAW;
  64.  
  65. TYP : CHAR {typ_lini = 0;} |
  66. FLOAT {typ_lini = 1;} |
  67. INT {typ_lini = 2;} |
  68. DOUBLE {typ_lini = 3;};
  69.  
  70.  
  71. %%
  72. #include "lex.yy.c"
  73. int main()
  74. {
  75. yyparse();
  76. }
  77. void yyerror(char* str)
  78. {
  79. printf("%s",str);
  80. }
  81. int yywrap()
  82. {
  83. return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement