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

Shift/Reduce conflict

by Aleksandar Acic
sreda, 06. jun 2007 - 22:01.

Ako neko zna kako treba preurediti datu gramatiku, da bi se prevazisao
Shift/Reduce conflict koji Cup prijavljuje prilikom uvodjenja akcija u
sledece smene iza terminala WHILE i LPAREN

molim da mi odgovori.



unmatched ::= IF LPAREN condition RPAREN statement

| IF LPAREN error RPAREN statement {:
System.out.println("Neispravna konstrukcija logickog izraza\n");

p=false; :}

| IF LPAREN condition RPAREN matched ELSE
unmatched

| IF LPAREN error RPAREN matched ELSE unmatched {:
System.out.println("Neispravna konstrukcija logickog izraza\n");

p=false; :}

| WHILE {:!!!!!!!!!:} LPAREN {:!!!!!!!!!:}
condition RPAREN unmatched

| WHILE LPAREN error RPAREN unmatched {:
System.out.println("Neispravna konstrukcija logickog izraza\n");

p=false; :};





matched ::= designator:des EQUAL{:Output.write("=");:} expr:exp SEMI
{:sem.checkAssign(des,exp,expleft);Output.write(";\n"); :}

| error SEMI {:
System.out.println("Neispravna konstrukcija izraza dodele\n");

p=false; :}

| designator LPAREN LPAREN SEMI

| designator LPAREN act_pars RPAREN
SEMI

| designator:des ART_OP_INC SEMI
{:RESULT=sem.checkInc(des,desleft);:}

| designator:des ART_OP_DEC SEMI
{:RESULT=sem.checkDec(des,desleft);:}

| BREAK SEMI

| RETURN SEMI{: if (!isVoid)
System.out.println("Greska: Metoda je deklarisana kao void i mora imati
ispravan return iskaz!"); returnExists=true;Output.write("return;");:}



| RETURN{:Output.write(" return ");:}
expr SEMI{: if (isVoid) System.out.println("Greska: Metoda je deklarisana
kao void! i ne sme imati return vrednost!"); returnExists=true;
Output.write(" ;"); :}



| READ LPAREN designator RPAREN SEMI

| PRINT LPAREN expr RPAREN SEMI

| PRINT LPAREN expr COMMA NUMBER
RPAREN SEMI

| LBRACE RBRACE

| LBRACE stmt_list RBRACE



| IF LPAREN condition RPAREN matched
ELSE matched

| IF LPAREN error RPAREN matched ELSE
matched {: System.out.println("Neispravna konstrukcija logickog izraza\n");

p=false; :}

| WHILE {:!!!!!!:} LPAREN
{:!!!!!!:} condition RPAREN matched

| WHILE LPAREN error RPAREN
matched {: System.out.println("Neispravna konstrukcija logickog izraza\n");

p=false; :};

Pozdrav

Aleksandar Acic