LP
Upam, da ti bo pomagalo.
LP Blaž
On 3/18/07, Tadej Baša <[EMAIL PROTECTED]> wrote:
Živjo!
Zanima me kako je s tretjo domačo nalogo? Ali jo je treba narediti ta
teden in kaj je za naredit, Slivnik še kar ni dal opisa.
lp
jure
Domaèa naloga 3 (chap 4)
Predpriprave:
- naredi datoteko makefile (ali uporabi makefile iz chap 3 in jo dopolni, da se
bo prevedlo tudi Absyn/*.java in Symbol/*.java)
- izbrii datoteki Parse/Lexer.java in Parse/Token.java
- v direktorij Parse/ posnemi datoteki Grm.cup in Tiger.lex iz chap 3
Spremembe znotraj datotek:
[Absyn/Print.java]
v vrstici: "public void prExp(Absyn.Exp e, int d)" odstrani 'Absyn.'
[Symbol/Symbol.java]
vrstico: private static java.util.Dictionary dict = new java.util.Hashtable();
spremeni v: private static java.util.Dictionary<String, Symbol> dict = new
java.util.Hashtable<String, Symbol>();
[Grm.cup]
zakomentiraj Lexer lexer;
dodaj public Absyn.exp parseResult; (to smo v chap 3 odstranili)
Na tej toèki pri prevajanju ne bi smeli priti do nobene napake. Pri izvedbi
"java Parse.Main prog" ne bi
smel niè izpisati, pri èemer je 'prog' nek program, ki ga sprejme tudi pri chap
3.
Uvod v chap 4 - primer za integer:
[Grm.cup]
spremenite:
non terminal exp; -> non terminal Absyn.Exp exp;
program ::= exp ; -> program ::= exp:e {: parser.parseResult = e; :};
exp ::= INT; -> exp ::= INT:i {: RESULT = new
Absyn.IntExp(0,i.intValue()); :}
[Parse/Parse.java]
na konec konstruktorja dodajte:
Absyn.Print printer = new Absyn.Print(System.out);
printer.prExp(absyn,0);
System.out.println("\n");
Primer izvedbe:
èe vse prevedete in v datoteko zapiete neko tevilo (npr. 235), bi vam moral
ob izvedbi ukaza
"java Parse.Main datoteka" moral izpisati IntExp(235)
Sedaj je potrebno produkcije dopolniti z ostalimi akcijami, s èimer bomo tako v
konèni fazi zgradili
drevo izpeljave za vsak veljaven program.