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

Re: [IR4PP1] SHIFT/REDUCE konflikt - Pitanje za asistenta a i ostale

by Marko Bojovic
subota, 25. novembar 2006 - 17:57.

Kolega,

taj deo gramatike koji ste naveli ne izaziva konflikte, ako nema akcija. Inace, LALR(1) gramatika data u postavci domaceg, ciji je deo i ono sto ste naveli, provereno nece izazvati nikakve konflikte, ako ne dodajete akcije. Ne dozvoljavajte da CUP sam resava konflikte. To je resenje koje Vam na pocetku moze izgledati lakse, ali kako dodajete sve vise i vise akcija, skoro je sigurno da ce Vam izazvati mnogo teze probleme, tako da bez slozene analize vise necete moci ni da odredite problem u Vasoj gramatici. Kada se javi konflikt razresite ga Vi transformacijom gramatike.

Jovanovic Ivan wrote:
Pitanje za asistenta a i ostale.

1) ExpressionList ::= ExpressionList COMMA Expression
| Expression;
2) Expression ::= TermList;

3) TermList ::= TermList AdditionOperator Term
| Term;

4) Term ::= FactorList;

5) FactorList ::= FactorList MultiplicationOperator Factor
| Factor
| OP_MINUS Factor;

6) Factor ::= Designator LPAREN ActualParametars RPAREN
| Designator
| Designator LPAREN RPAREN
| NUMBER
| CHARCONST
| NEW Type
| NEW Type LSQUAREBRACKET Expression RSQUAREBRACKET
| LPAREN Expression RPAREN;

CUP pokrecem sa -dump_states.

*** Shift/Reduce conflict found in state #149
between ExpressionList ::= Expression (*)
and Factor ::= LPAREN Expression (*) RPAREN
under symbol RPAREN
Resolved in favor of shifting.

U ovim smenama postoji SHIFT/REDUCE konflikt kada parser dobije token RPAREN u smeni
za Factor opcija "LPAREN Expression RPAREN". Tada ne zna da li treba da radi REDUCE
prema prvoj smeni (ExpressionList) ili SHIFT (smena za Factor "LPAREN Expression RPAREN").
CUP resava ovaj konflikt u korist SHIFT i ja smatram da je to ispravno ali nisam siguran,
pa bih zeleo da neko potvrdi.

Smatram da je ispravno da ostavim resenje konflikta u korist SHIFT jer mi se cini da
problematicna smena za Factor sluzi za "rucno" namestanje prioriteta operatora u izrazima.
Na primer var1 = (a+b)*c;
Parser bi a+b prepoznao kao expression i ako bi odlucio da ga reduce-uje sa steka na steku bi
ostale prazne zagrade u sred veceg expressiona koje ne mogu da se upare sto bi dovelo do greske.

Da li sam u pravu ili ne?

Hvala,
Ivan

------------------------------------------------------------------------
Access over 1 million songs - Yahoo! Music Unlimited. <http://pa.yahoo.com/*http://us.rd.yahoo.com/evt=36035/*http://music.yahoo.com/unlimited/>