Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<math.h>
- int brojoSlov(char c)
- {
- return (c>= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c>= '0' && c <= '9') || c == '_';
- }
- int brojJe(char c)
- {
- return (c >= '0' && c <= '9') || c == '-';
- }
- int Dodjela (char *kod, char *ime)
- {
- char *p=ime;
- char *s=kod;
- while (*s!='\0')
- {
- if (*s==*p)
- {
- /* Ovdje sam poboljšao ovdjete, teško je ispitati sto sve moze
- biti ispred varijable da bude dobar kod: mogu svi operatori,
- sve zagrade, ... (trebalo bi dokumentaciju citati.
- Lakse je ispitati da li je ispred nesto sto NE smije biti, a
- ne smije biti neki znak koji moze biti u imenu varijable jer
- bi to znacilo da to nije nasa varijable nego neka druga. Tome
- sluzi funkcija brojoSlov*/
- if ((s==kod) || !brojoSlov(*(s-1))) //poboljsani uvjeti
- {
- while (*s==*p)
- {
- s++;
- p++;
- if (*p=='\0') break;
- }
- if (*s=='=' && brojJe(*(s+1))) //moze == biti
- {
- s++;
- int negativan = 0; // false
- if(*s=='-')
- {
- negativan = 1; //true;
- s++;
- }
- /*Pravljenje broja je sablon i nauci ga, a bezveze
- ti je pamtiti neke duzine broja kada mozes odmah da
- ga pravis kako se kreces kroz string*/
- int broj = 0;
- while (*s>='0' && *s<='9')
- {
- broj = broj*10 + (*s - '0');
- s++;
- }
- if(negativan == 1) //ako je negativan, napravi ga negativnim
- broj *= -1;
- //s--
- /*Da se ovdje ne zavrsava program, tj. da se dalje nastavlja
- ispitivanje stringa trebalo bi uraditi s-- jer ce se s++ uraditi
- u svakom slucaju, a vec s pokazuje iza posljednjeg braja*/
- return broj;
- }
- else
- {
- p = ime; //Ako vec imas pomocno p, onda ga samo vratis na pocetak tj. na ime
- }
- }
- }
- s++;
- }
- return 0; //nije pronadjeno, ne znam sto treba vratiti
- }
- int main ()
- {
- char s[]="int x; x++; x==2; xs=32 sx=12 _x=11 for (x=-15; x<30; x++) x*=2;";
- char p[]="x";
- printf("%d\n",Dodjela(s,p));
- printf("%d\n",Dodjela(s,"xs"));
- printf("%d\n",Dodjela(s,"_x"));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement