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

Za asistenta - atributi simbola

by Bojic Petar
ponedeljak, 22. maj 2006 - 21:23.

Da bih se upoznao sa koriscenjem atributa simbola u gramatici, napravio sam jednostavnu gramatiku koja opisuje niz reci razdvojenih zarezom. Cilj mi je bio da neterminalu <file> dodelim atribut koji bi govorio koliko reci ima u <file>. Cisto brojanje reci je moglo jednostavnije da se uradi inkrementiranjem neke staticke promenljive ali cilj mi je bio da uradim to preko atributa simbola. Evo gramatike koja to radi :

%token NL /* newline */
%token <sval> REC
%type <fileAtrib> file

%%

program : file { System.out.println("Ukupan broj reci je "+$1.brojReci); }

file : REC { $$ = new FileType();
$$.brojReci=1; System.out.println("REC "+ $1); }
file : file "," REC { $$.brojReci=$1.brojReci+1;
System.out.println("File prepoznat uz dopisano "+ $3); }
;

Ovde sam morao da definisem klasu FileType :
public class FileType {
public int brojReci;
}
i da u klasi parserVal dodam polje :
public FileType fileAtrib;

Moje pitanje je sledece: Da li postoji standardniji nacin da se ovo uradi, u smislu tehnike koju treba koristiti u domacem (BYacc)? Sumnju mi unosi cinjenica da sam morao da editujem klasu parserVal iako nju BYacc automatski generise. To bi znacilo da za svaki atribut nekog simbola koji je tipa neke reference na klasu treba dodavati posebno polje tog tipa u klasu parserVal. Napominjem da sam namerno stavio da atribut neterminala <file> bude klasnog tipa a ne obican integer.

Pozdrav
Petar