Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- void yyerror(char*);
- int yylex();
- int line = 1;
- int typ_lini; /*char = 0, float = 1, int = 2, double = 3 */
- %}
- %union {
- char* VAR_NAME;
- int TAB_SIZE;
- };
- %start S
- %token <VAR_NAME> NAZWA_ZMIENNEJ
- %token <TAB_SIZE> LICZBA
- %token ENDL CHAR FLOAT INT DOUBLE L_NAW P_NAW SREDNIK PRZECINEK GWIAZDKA
- %%
- S : TYP ZMIENNE SREDNIK ENDL S|;
- ZMIENNE : VAR |
- VAR PRZECINEK ZMIENNE;
- VAR : NAZWA_ZMIENNEJ
- {
- switch(typ_lini)
- {
- case 0: printf("zmienna %s, typ char\n",$1); break;
- case 1: printf("zmienna %s, typ float\n",$1); break;
- case 2: printf("zmienna %s, typ int\n",$1); break;
- case 3: printf("zmienna %s, typ double\n",$1); break;
- }
- }|
- GWIAZDKA NAZWA_ZMIENNEJ
- {
- switch(typ_lini)
- {
- case 0: printf("zmienna %s, typ char*\n",$2); break;
- case 1: printf("zmienna %s, typ float*\n",$2); break;
- case 2: printf("zmienna %s, typ int*\n",$2); break;
- case 3: printf("zmienna %s, typ double*\n",$2); break;
- }
- }|
- NAZWA_ZMIENNEJ
- {
- switch(typ_lini)
- {
- case 0: printf("tablica %s, typ char, rozmiar ",$1); break;
- case 1: printf("tablica %s, typ float, rozmiar ",$1); break;
- case 2: printf("tablica %s, typ int, rozmiar ",$1); break;
- case 3: printf("tablica %s, typ double, rozmiar ",$1); break;
- }
- }TABLICA |
- GWIAZDKA NAZWA_ZMIENNEJ TABLICA ;
- TABLICA : L_NAW LICZBA P_NAW {printf("%d", $2);}|
- TABLICA L_NAW LICZBA P_NAW;
- TYP : CHAR {typ_lini = 0;} |
- FLOAT {typ_lini = 1;} |
- INT {typ_lini = 2;} |
- DOUBLE {typ_lini = 3;};
- %%
- #include "lex.yy.c"
- int main()
- {
- yyparse();
- }
- void yyerror(char* str)
- {
- printf("%s",str);
- }
- int yywrap()
- {
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement