«« ( Date ) »» // «« ( Thread ) »» // ri4pp - 2004

Re: Tip Tokena

by Jovan Popovic
ponedeljak, 15. novembar 2004 - 08:38.

> Na vezbama iz pp Jovan Popovic je izmedju ostalog
> preporucio da tokene podelimo u nekoliko osnovnih
> tipova kao sto bi bili "operatori, kljucne reci, promenljive,
> konstante...". To bi navodno olaksalo realizaciju sintaksnog
> analizatora. Ja sam to shvatio na sledeci nacin :
> Prema prezentaciji o Jlex-u u kojoj pise
> " Kako razlikovati tip tokena?
> Izvodenjem novih klasa iz klase Yytoken
> Analizator vraca podklase
> Postavljanjem atributa tip u klasu Yytoken
> Tipovi se navode u klasi sym.java "


Poztoje dva nacina za razlikovonje tokena:
1. Da se za svaki tip tokena izvede nova podklasa klase YYToken
2. Da se koristi jedna klasa YYToken koja ima polje koje sadrzi
informaciju o tipu tokena. Tip tokena je int konstanta definisana u klasi
sym.

Primeri su u vezbama.



>
> Dakle za svaki tip tokena kao sto je operator, kljucna rec,...
> trebalo bi izvesti potklasu iz klase Yytoken. To bi znacilo
> da u okviru svake potklase treba da postoji dodatni atribut
> koji bi sluzio za razlikovanje podtipova, npr u slucaju
> operatora koji je konkretno operator u pitanju (+, -,*, /,++...),
> u slucaju kljucne reci o kojoj kljucnoj reci se radi
> (class, public, package) itd. Sta u tom slucaju znaci ona
> teza iz prezentacije :
> " Postavljanjem atributa tip u klasu Yytoken ",
> jel se misli na tip koji bi odredio da li se radi o operatoru,
> kljucnoj reci, promenljivoj, ... ili bi taj tip nosio kompletnu
> informaciju kao sto je konkretna vrsta operatora, koja je
> konkretna kljucna rec itd.
> Sta dalje, znaci ono :
> " Tipovi se navode u klasi sym.java "?
> Na koje se tipove misli ?

Za svaki token treba definisati int konstantu i definisati je u klasi sym

> Na kraju potpuno me je zbunila postavka domaceg u kojoj
> se i ne pominje klasa Yytoken, nego klasa Symbol.

Projektuje se CUP-kompatibilni parser

> Ona ima atribut int sym koji bi trebao da govori o tipu
> tokena. Kako onda realizovati ono sa deljenjem u osnovne
> tipove koji dalje imaju svoje podtipove za svaku konkretnu
> instancu. Da li iz klase Symbol treba izvoditi potklase
> za svaki osnovni tip tokena kao sto bi radili za klasu
> Yytoken ?
> U uputstvu za domaci pise " Projektovati klasu
> java_cup.runtime.Symbol ...".
> Sta predstavlja java_cup.runtime? Jel to ime paketa u
> kojem treba da se nalazi klasa Symbol? Da li je to vec
> negde definisan paket u okviru okruzenja za JLex ?
>

U domacem zadatku pise:

Generisani leksièki analizator mora biti CUP-kompatibilan tj. Mora
implementirati interfejs java_cup.runtime.Scanner.

Scanner i Symbol su deo CUP specifikacije i dati su u postavci, a nalaze
se u CUP okruzenju(mada vam ono za sada nije potrebno).
Za CUP-kompatibilne parsere se ne mogu izvoditi nove klase iz klase Symbol
nego se mora definisati polje tip kojim se razlikuju tokeni.

Pozdrav,
Jovan

> Pozdrav