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)
- izbriši 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 zapišete 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.

Reply via email to