Re: Poziv, poziv, poziv metode ... stavlja parametre na stack
Ova tvoja konstrukcija ne valja zato sto ti parser uzima RPAREN za
zavrsetak errora i time je ne moze iskoristiti za zavrsavanje poziva
funkcije, zbog cega ti program puca,
a kad stavis )) lepo sve odradi. Iz tvog teksta sam zakljucio da si error kod znaka dodele deklarisao kao u primeru sa vezbi, sto nije najkorektnije zato sto ce ti parser
bilo kakvu gresku prepoznati kao gresku pri operaciji dodele. Ja sam to ovako nekako uradio i lepo radi:
assign_expr ::= designator EQUAL expr SEMI
{: System.out.println("Pronadjen izraz dodele."); :}
|
designator EQUAL error SEMI
{: System.out.println("Neispravna konstrukcija izraza dodele\n");
p=false; :}
|
EQUAL error SEMI
{: System.out.println("Neispravna konstrukcija izraza dodele\n");
p=false; :};
Mogu da se dodaju jos neke konstrukcije, ali mislim da nema potrebe...
Sad ti je jasno zasto ti je ovo prijavio.
E, sad, sto se tice tvog konkretnog pitanja, ja sam razmisljao ovako: Ako na mestu gde treba da budu stvarni parametri parser nadje bilo kakvu drugu konstrukciju neka smatra
da je to greska. I to moze da se izvede na ovaj nacin:
statement ::= assign_expr
|
designator LPAREN RPAREN SEMI
{: System.out.println("Pronadjen poziv metode bez argumenata."); :}
|
designator LPAREN act_pars RPAREN SEMI
{: System.out.println("Pronadjen poziv metode sa argumentima."); :}
|
designator LPAREN act_pars_err RPAREN SEMI /* ovo se doda*/
|
RETURN SEMI
{: System.out.println("Pronadjen prazan return iskaz."); :}
|
RETURN expr SEMI
{: System.out.println("Pronadjen return iskaz."); :}
|
PRINT LPAREN expr RPAREN SEMI
{: System.out.println("Pronadjen poziv metode print."); :};
act_pars_err ::= error
{: System.out.println("Greska pri opisu stvarnih parametara poziva metode");
p = false;
:};
Nadam se da sam bar malo bio od pomoci.
Vlada
Jovanovic Ivan wrote:
a kad stavis )) lepo sve odradi. Iz tvog teksta sam zakljucio da si error kod znaka dodele deklarisao kao u primeru sa vezbi, sto nije najkorektnije zato sto ce ti parser
bilo kakvu gresku prepoznati kao gresku pri operaciji dodele. Ja sam to ovako nekako uradio i lepo radi:
assign_expr ::= designator EQUAL expr SEMI
{: System.out.println("Pronadjen izraz dodele."); :}
|
designator EQUAL error SEMI
{: System.out.println("Neispravna konstrukcija izraza dodele\n");
p=false; :}
|
EQUAL error SEMI
{: System.out.println("Neispravna konstrukcija izraza dodele\n");
p=false; :};
Mogu da se dodaju jos neke konstrukcije, ali mislim da nema potrebe...
> Ako navedem - Method1(a1,a2)); - cisto fore radim, prijavljuje gresku„neispravana konstrukcija izraza dodele” i oporavlja se od greske.<<
Sad ti je jasno zasto ti je ovo prijavio.
E, sad, sto se tice tvog konkretnog pitanja, ja sam razmisljao ovako: Ako na mestu gde treba da budu stvarni parametri parser nadje bilo kakvu drugu konstrukciju neka smatra
da je to greska. I to moze da se izvede na ovaj nacin:
statement ::= assign_expr
|
designator LPAREN RPAREN SEMI
{: System.out.println("Pronadjen poziv metode bez argumenata."); :}
|
designator LPAREN act_pars RPAREN SEMI
{: System.out.println("Pronadjen poziv metode sa argumentima."); :}
|
designator LPAREN act_pars_err RPAREN SEMI /* ovo se doda*/
|
RETURN SEMI
{: System.out.println("Pronadjen prazan return iskaz."); :}
|
RETURN expr SEMI
{: System.out.println("Pronadjen return iskaz."); :}
|
PRINT LPAREN expr RPAREN SEMI
{: System.out.println("Pronadjen poziv metode print."); :};
act_pars_err ::= error
{: System.out.println("Greska pri opisu stvarnih parametara poziva metode");
p = false;
:};
Nadam se da sam bar malo bio od pomoci.
Vlada
Jovanovic Ivan wrote:
Postoji problem sa oporavkom od greske prilikom konstrukcije stvarnih parametara. Oporavak treba da se vrsi do prvog znaka „)”. Kod za oporavak sam stavljao u vise smena koje bi potencijalno mogle da rese problem ali ni jednom nije uspelo.
Zato navodim ovu smenu cisto argumenta radi.
ActualParametars ::= ExpressionList
| error RPAREN {: badActualParams(); :};
Evo ispravnog primera konstrukcije stvarnih parametara.
Method1(a1, a2);
Ako se ne navede prvi parametar - Method1(,a2); - baca se izuzetak i oporavak od greske je nemoguc. Ukoliko se pre „;” doda jos jedna „)”, oporavak od greske se vrsi ispravno.
Ako se ne navede znak „,”- Method1(a1 a2); - baca se izuzetak i oporavak od greske je nemoguc. Ukoliko se pre „;” doda jos jedna „)”, oporavak od greske se vrsi ispravno.
Ako se ne navede drugi parametar - Method1(a1, ); - baca se izuzetak i oporavak od greske je nemoguc. Ukoliko se pre „;” doda jos jedna „)”, oporavak od greske se vrsi ispravno.
Ako navedem - Method1(a1,a2)); - cisto fore radim, prijavljuje gresku „neispravana konstrukcija izraza dodele” i oporavlja se od greske.
Ako je neko od kolega resio ovaj problem ili ga nema neka da neke hintove kako bi ovo moglo da se resi.
Takodje, moli se asistent da, ukoliko je u mogucnosti, rasvetli situaciju jer ovde se desava nesto sto se nikako ne slaze.
Hvala,
Ivan
------------------------------------------------------------------------
Everyone is raving about the all-new Yahoo! Mail beta. <http://us.rd.yahoo.com/evt=45083/*http://advision.webevents.yahoo.com/mailbeta>
------------------------------------------------------------------------
-----------------------------------------------------------------
unsubscribe:
minimalist@rti.etf.bg.ac.yu?subject=unsubscribe%20ir4pp1
-----------------------------------------------------------------
- References:
- Poziv, poziv, poziv metode ... stavlja parametre na stack
- From: Jovanovic Ivan <vodjai6@yahoo.com>
- Poziv, poziv, poziv metode ... stavlja parametre na stack
Previous by date: Poziv, poziv, poziv metode ... stavlja parametre na stack
Next by date: classpath
Previous by thread: Poziv, poziv, poziv metode ... stavlja parametre na stack Next by thread: classpath
Previous by thread: Poziv, poziv, poziv metode ... stavlja parametre na stack Next by thread: classpath