[cpl] [Tema 1] Substring in dispatch

Călin Cruceru crucerucalincristian at gmail.com
Wed Oct 26 23:40:14 EEST 2016


Salutare,

Tot nu înțeleg.

2016-10-26 0:51 GMT+03:00 Andrei Tuicu via cpl <cpl at cursuri.cs.pub.ro>:
> Salut, Calin,
>
> Am sa trec pe lista discutia inceputa la laborator, pentru a o poatea vedea
> si ceilalti colegi care se mai lovesc de acesta problema. Asa cum ti-a dat
> si Lavinia hint-ul in intrebarea din mailul precedent; din moment ce nu se
> poate face reduce pentru nicio regula, dar inca exista in gramatica reguli
> pentru care se poate face un match "partial" (daca se poate spune asa) se va
> face shift.
>
> Plecand de la exemplele tale:  "[a[1,2].foo]" sau "[a [foo]]"
>
>  in momentul in care se ajungi sa ai "[a" pe stiva si lookahead-ul "[" -> in
> acest caz, poti face doar shift. Ai 2 reguli care fac "match partial", in
> sensul ca nu ai ajuns la ceva ce nu este atins de nicio regula din gramatica
> si atunci e clar eroare de sintaxa, dar nici nu ai informatii suficiente
> incat sa alegi una dintre cele 2.

De ce poate face doar shift?

Token-ul pe care îl analizez în momentul de față este un IDENTIFIER;
lookahead-ul este "[".  Eu vreau să accept atât [IDENTIFIER
<arguments>] (forma prescurtată de dispatch), cât și <expr1>[<expr>,
<expr>] (am pus <expr1> acolo pentru că poate nu are sens orice
expresie să stea acolo; nu e chiar relevant aici, cred).  Motivul,
totuși, pentru care am <expr1> acolo e că vreau să accept și lucruri
de genul [stack.pop][1,5], cum e chiar în exemplul de la vectori; de
asemenea, un IDENTIFIER poate fi redus la <expr1>.  Acum, conflictul e
evident.  Dacă fac shift, rămân cu IDENTIFIER pe stivă, la care
parser-ul LALR nu se va mai întoarce să îl reducă eventual la <expr1>.
Dacă fac reduce, e clar că opțiunea [IDENTIFIER <arguments>] pică,
pentru că deja o să am pe stivă altceva decât IDENTIFIER.

>  in momentul in care ai "[a[1, 2]" sau "[a[foo]" pe stiva, poti sa decizi ca
> pentru "a[1, 2]" faci reduce-ul la substring si pentru "[foo]" la dispatch.
> Mai mult decat atat, exista un atom care diferentiaza clar regula pentru
> substring, de regula dispatch. Nu-mi dau seama daca ar trebui sa ti-l zic eu
> sau sa te las pe tine sa-l descoperi. :)
>
> O sa incerc ceva la mijloc si o sa te ajut cu un nou hint: Ce nu apare
> intr-un dispatch, dar apare intr-un substring? Uita-te dupa '[', nu inainte.
>

E foarte evident lucrul acesta; nu asta era dilema.

Scuze pentru insistență.  Vreau, dacă e posibil, să mi se explice ce
asum/înțeleg greșit.

Mersi,
Călin


More information about the cpl mailing list