[cpl] [Tema 1] Substring in dispatch

Andrei Tuicu andrei.tuicu at gmail.com
Wed Oct 26 00:51:57 EEST 2016


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.
   -  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.

Cheers,
Andrei

Pe 25 octombrie 2016, 13:06, Lavinia Ghica via cpl <cpl at cursuri.cs.pub.ro>
a scris:

> Salut,
>
> Sintaxa este valida.
>
> Depinde cum scrii gramatica. De exemplu, ce se intampla atunci cand a
> parsat ‘[‘ si IDENTIFER, lookahead-ul este ‘[‘ si nu poate sa faca reduce
> pentru nicio regula?
>
> Spor,
> Lavinia
>
> > On 24 Oct 2016, at 17:36, Călin Cruceru via cpl <cpl at cursuri.cs.pub.ro>
> wrote:
> >
> > Salutare,
> >
> > Nu este clar din manualul limbajului dacă un apel folosind sintaxa de
> > slicing pe string-uri poate fi folosit direct ca obiectul pe care se
> > va apela o funcție, folosind sintaxa de dispatch.  Cu alte cuvinte,
> > este sintaxa următoare validă
> >
> > [someString[lhs, rhs].toInt]
> >
> > ?
> >
> > Motivul pentru care întreb este că nu mi-e clar cum poate fi asta
> > parsat de un parser LALR(1), deoarece în momentul în care a parsat "["
> > "id" și lookahead-ul este "[", nu are cum să își dea seama dacă
> > trebuie să facă shift, crezând că "[" face parte din primul argument
> > (care se întâmplă să fie tot un dispatch), sau să facă reduce, crezând
> > că face parte dintr-o expresie de tip "slice".
> >
> > Mersi și scuze dacă mi-a scăpat ceva.
> >
> > Călin
> > _______________________________________________
> > cpl mailing list
> > cpl at cursuri.cs.pub.ro
> > http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/cpl
>
> _______________________________________________
> cpl mailing list
> cpl at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/cpl
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/cpl/attachments/20161026/569b6c61/attachment.html>


More information about the cpl mailing list