[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