[cpl] [Tema 1] Conflict shift/reduce

Marius Ungureanu therzok at gmail.com
Sun Nov 8 23:46:19 EET 2015


Am inteles.

Multumesc mult,
Marius
On Nov 8, 2015 11:42 PM, "Bogdan Nitulescu" <bogdannitulescu at yahoo.com>
wrote:

> Da; daca vrei ca parserul sa iti mearga perfect pe absolut toate cazurile,
> trebuie sa ai o gramatica un pic mai complexa decat cateva reguli gen *expression
> : '[' expresssion expression, expression ']' *
>
> Bogdan
>
> On 11/8/2015 9:30 PM, Marius Ungureanu wrote:
>
> Salut,
>
> Ideea e sa mut reduce-urile sa fie pe cazuri particulare ale combinatiilor
> (de exemplu cazuri particulare de precedenta) in loc sa raman pe gramatica
> generala, nu?
>
> Mersi,
> Marius
> On Nov 8, 2015 9:07 PM, "Bogdan Nitulescu via cpl" <cpl at cursuri.cs.pub.ro>
> wrote:
>
>> Salut,
>>
>> Ce zici tu este ca e dificil sa faci diferenta intre dispatch si vector.
>> Dar interpretarea nu este ambigua, se poate determina din context. De
>> exemplu, sa luam urmatoarele expresii:
>>
>> [id] - nu poate fi decat dispatch , [] care nu este precedat de o
>> expresie nu e index
>> expr[id] - nu poate fi decat index
>> [id1 [id2]] - e interpretat unic ca dublu dispatch, id1(id2()) intr-un
>> limbaj C-like;
>> [id1[id2].id3] - nu poate fi decat un dispatch + index (id1[id2]).id3()
>> in  C++
>>
>> Un parser care recunoaste asa ceva e un pic mai complex, si daca e
>> nevoie, poti folosi o solutiionare implicita a unui conflict shift-reduce,
>> cu reguli de precedenta, la un moment dat; si prelucrari pe arborele
>> sintactic rezultat in urma parserului, daca nu gasesti alta solutie.
>>
>> (BTW, Testele pe care le-am pus noi pentru tema sunt un pic mai permisive
>> si nu acopera chiar toate cazurile de mai sus)
>>
>> Bogdan
>>
>> On 11/8/2015 4:42 PM, Marius Ungureanu via cpl wrote:
>>
>> On Nov 8, 2015 4:43 AM, "Marius Ungureanu" <therzok at gmail.com> wrote:
>> >
>> > Salut,
>> >
>> > Avem cazul in care avem un dispatch, iar primul argument este de tip
>> substring:
>> >
>> >  * Caz real: [hello [3, 5].length]
>> >  * Caz teoretic: [expresie argument]
>> >
>> > Gramatica define ambigua in acest context pentru ca am avea 2 cazuri
>> > de conflict:
>> >
>> > [expresie <inceput de dispatch>]
>> > sau
>> > [expresie_substring]
>> >
>>
>> Vreau sa clarific. Poate sa faca shift si sa intre in continuare de
>> substring sau face reduce pentru ca incepe un dispatch si va parsa
>> urmatorul termen.
>>
>> [hello[
>>
>> Poate fi:
>>
>> [expresie <inceput argument dispatch>]
>> [expresie <inceput substring>]
>>
>> Nu vad nicio solutie prin care se poate rezolva ambiguitatea in Bison,
>> ambele cazuri fiind pertinente si nefiind vorba de prioritate a
>> operatorilor de stanga (avand aceeasi prioritate definita in manual).
>>
>> Acelasi conflict exista si pentru implementarea vectorilor.
>>
>> O solutie care ar fi simpla din punct de vedere sintactic, dar ar schimba
>> toata tema ar fi ca primul argument al unui dispatch sa fie delimitat de
>> metoda apelata printr-un separator. I.e. ':' cum face si objc.
>>
>> Multumesc,
>> Marius
>>
>>
>> _______________________________________________
>> cpl mailing listcpl at cursuri.cs.pub.rohttp://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/20151108/d9a24e92/attachment-0001.html>


More information about the cpl mailing list