Re: Pitanje za asistenta
NE GLEDAJTE TABELU SIMBOLA.
Vi radite sintaksni analizator, sto znaci da treba da napisete gramatiku
koja opisuje jezik mikrojava i ne zanima vas da li je nesto preddefinisano
ili nije.
Znaci NEMA tabele simbola, NEMA provere da li su tipovi u redu, da li su
promenljive definisane, da li ima duplih definicija.
vi cete na ulazu mozete dobiti fajlove oblika:
struct LEN
{
int null;
}
var int null, date;
const int chr = "neki string";
BEGIN
LEN = date + int;
null = null.char("neki string");
ord = chr[null+ord];
END.
Ovaj ulaz jeste semanticki neispravan ali je sintaksno ispravan zato sto
na primer u liniji:
LEN = date + 'd';
imate ispravan zbir koji se dodaje promenljivoj.
to sto date ne moye da bude ime promnljive, sto ne mozete sabirati itn
tip, i sto ne mozete dodeljivati vrednost funkciji LEN uopste nije problem
SINTAKSNOG analizatora.
ono sto je sintaksnom analiyatoru vayno je da imate ulaz koji se moze
upariti sa nekom smenom oblika:
<zbir> '=' <izraz>
<izraz> '=' <izraz> + <sabirak> | <sabirak>
Ako je redosled terminala ispravan i u skladu sa gramatikom ulaz je
i pri tome vas ne zanima da li je neko stavio preddefinisani simbol u
pogresan kontekst.
Na ovom nivou vas ne treba da brine sta je u terminalima tako da ako vam
na ulayu dodje x, len ili date vi to mozete proglasiti za terminal
IDENTIFIKATOR i prepustiti parseru da utvrdi da li je redosled ispravan i
u skladu sa gramatikom.
Naravno ako vam je lakse mozete i preddefinisane simbole koristiti u
smenama kao posebne terminale kao:
len {return sym.LEN }
date {return sym.DATE }
[a-z]+ {return sym.ID }
pa da u smenama stavite na primer za deklaraciju klase ili poziv funkcije:
<cdecl> : STRUCT ID '{' <telo> '}'
<fcall> : ID(<args>)
<fcall> : LEN(<args>)
<fcall> : ORD(<args>)
da biste se sigurali da neko ne stavi niz karaktera len kao ime klase ili
promenljive, ali ide u domen semanticke analize i to vam to nije potrebno
za ovaj domaci. Nije greska ako to uradite ali ako vam to komplikuje
gramatiku izbacite te terminale.
Jos jedna vayna stvar. Nije potrebno proveravati da li je argument
funkcije chr ceo broj ili da li su vromenljive u ybiru celobrojne ili
karakteri. To ce se isto raditi tek sledeceg semestra.
Ono sto vi treba da uradite je SAMO gramatika koja ispravno prepoznaje
redosled terminala na ne i da li ti terminali imaju smisla po tipu.
Prica o tabeli simbola ce doci sledeceg semestra.
> Kada se kaze da je nesto predefinisano mi to ubacujemo u tabelu simbola
> pre nego li pocnemo da parsiramo ulazni fajl. Pogledajte tabelu simbola i
> funkciju init() koja upravo puni tabelu simbola predefinisanim:
> tipovima,
> funkcijama,
> strukturama
>
> bez predefinisanih recimo tipovi ne bi mogli da iskompajliramo sledecu
> liniju:
> int a;
> kompajler bi "rekao" da 'int' nije definisano slicno je i sa ostalim
>
> rezime: kada se kaze da je nesto predefinisano znaci da ga treba ubaciti u
> tabelu sym. tamo gde je metoda init() kao sto je to uradjeno sa tipovima
> int, char ... i funkcijama...
>
>
> pozdrav,
>
>
> ----- Original Message -----
> From: Ognjen Scekic
> To: ri4pp@titan.etf.bg.ac.yu
> Sent: Sunday, December 25, 2005 11:55 PM
> Subject: [ri4pp] Pitanje za asistenta
>
>
> U postavci domaceg za nivo C pise da se uvodi i predefinisana klasa
> date, a zatim se u primjeru za nivo C pojavljuje:
>
> struct date {
> var day,year:int;
> }
>
> Sta onda treba da znaci cinjenica da je nesto predefinisano (ovo se
> odnosi i na ostale stvari, kao sto su f-je ord, len i chr), odnosno sta
> se od nas ocekuje da uradimo ?
> To bi trebalo malo da pojasnite, jer mi jos ne znamo mehanizam
> funkcionisanja semanticke analize, pa ne bi valjalo da sada napravimo
> nesto sto cemo kasnije morati mnogo prepravljati kada budemo radili nove
> domace.
>
> Hvala,
> Ognjen Scekic
Vi radite sintaksni analizator, sto znaci da treba da napisete gramatiku
koja opisuje jezik mikrojava i ne zanima vas da li je nesto preddefinisano
ili nije.
Znaci NEMA tabele simbola, NEMA provere da li su tipovi u redu, da li su
promenljive definisane, da li ima duplih definicija.
vi cete na ulazu mozete dobiti fajlove oblika:
struct LEN
{
int null;
}
var int null, date;
const int chr = "neki string";
BEGIN
LEN = date + int;
null = null.char("neki string");
ord = chr[null+ord];
END.
Ovaj ulaz jeste semanticki neispravan ali je sintaksno ispravan zato sto
na primer u liniji:
LEN = date + 'd';
imate ispravan zbir koji se dodaje promenljivoj.
to sto date ne moye da bude ime promnljive, sto ne mozete sabirati itn
tip, i sto ne mozete dodeljivati vrednost funkciji LEN uopste nije problem
SINTAKSNOG analizatora.
ono sto je sintaksnom analiyatoru vayno je da imate ulaz koji se moze
upariti sa nekom smenom oblika:
<zbir> '=' <izraz>
<izraz> '=' <izraz> + <sabirak> | <sabirak>
Ako je redosled terminala ispravan i u skladu sa gramatikom ulaz je
i pri tome vas ne zanima da li je neko stavio preddefinisani simbol u
pogresan kontekst.
Na ovom nivou vas ne treba da brine sta je u terminalima tako da ako vam
na ulayu dodje x, len ili date vi to mozete proglasiti za terminal
IDENTIFIKATOR i prepustiti parseru da utvrdi da li je redosled ispravan i
u skladu sa gramatikom.
Naravno ako vam je lakse mozete i preddefinisane simbole koristiti u
smenama kao posebne terminale kao:
len {return sym.LEN }
date {return sym.DATE }
[a-z]+ {return sym.ID }
pa da u smenama stavite na primer za deklaraciju klase ili poziv funkcije:
<cdecl> : STRUCT ID '{' <telo> '}'
<fcall> : ID(<args>)
<fcall> : LEN(<args>)
<fcall> : ORD(<args>)
da biste se sigurali da neko ne stavi niz karaktera len kao ime klase ili
promenljive, ali ide u domen semanticke analize i to vam to nije potrebno
za ovaj domaci. Nije greska ako to uradite ali ako vam to komplikuje
gramatiku izbacite te terminale.
Jos jedna vayna stvar. Nije potrebno proveravati da li je argument
funkcije chr ceo broj ili da li su vromenljive u ybiru celobrojne ili
karakteri. To ce se isto raditi tek sledeceg semestra.
Ono sto vi treba da uradite je SAMO gramatika koja ispravno prepoznaje
redosled terminala na ne i da li ti terminali imaju smisla po tipu.
Prica o tabeli simbola ce doci sledeceg semestra.
> Kada se kaze da je nesto predefinisano mi to ubacujemo u tabelu simbola
> pre nego li pocnemo da parsiramo ulazni fajl. Pogledajte tabelu simbola i
> funkciju init() koja upravo puni tabelu simbola predefinisanim:
> tipovima,
> funkcijama,
> strukturama
>
> bez predefinisanih recimo tipovi ne bi mogli da iskompajliramo sledecu
> liniju:
> int a;
> kompajler bi "rekao" da 'int' nije definisano slicno je i sa ostalim
>
> rezime: kada se kaze da je nesto predefinisano znaci da ga treba ubaciti u
> tabelu sym. tamo gde je metoda init() kao sto je to uradjeno sa tipovima
> int, char ... i funkcijama...
>
>
> pozdrav,
>
>
> ----- Original Message -----
> From: Ognjen Scekic
> To: ri4pp@titan.etf.bg.ac.yu
> Sent: Sunday, December 25, 2005 11:55 PM
> Subject: [ri4pp] Pitanje za asistenta
>
>
> U postavci domaceg za nivo C pise da se uvodi i predefinisana klasa
> date, a zatim se u primjeru za nivo C pojavljuje:
>
> struct date {
> var day,year:int;
> }
>
> Sta onda treba da znaci cinjenica da je nesto predefinisano (ovo se
> odnosi i na ostale stvari, kao sto su f-je ord, len i chr), odnosno sta
> se od nas ocekuje da uradimo ?
> To bi trebalo malo da pojasnite, jer mi jos ne znamo mehanizam
> funkcionisanja semanticke analize, pa ne bi valjalo da sada napravimo
> nesto sto cemo kasnije morati mnogo prepravljati kada budemo radili nove
> domace.
>
> Hvala,
> Ognjen Scekic
- Follow-Ups:
- FOR petlja -pitanje za asistenta
- From: Goran Rakocevic <goxy_83@yahoo.com>
- FOR petlja -pitanje za asistenta
- References:
- Pitanje za asistenta
- From: "Ognjen Scekic" <oscekic@sezampro.yu>
- Re: Pitanje za asistenta
- From: "Marko Jagodic" <jagodici@verat.net>
- Pitanje za asistenta
Previous by date: Re: Pitanje za asistenta
Next by date: FOR petlja -pitanje za asistenta
Previous by thread: Re: Pitanje za asistenta Next by thread: FOR petlja -pitanje za asistenta
Previous by thread: Re: Pitanje za asistenta Next by thread: FOR petlja -pitanje za asistenta