[cpl] [Tema 1] Conflict shift/reduce

Bogdan Nitulescu bogdannitulescu at yahoo.com
Sun Nov 8 23:42:35 EET 2015


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 <mailto: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
>>     <mailto: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 list
>>     cpl at cursuri.cs.pub.ro <mailto: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 <mailto: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/41edda57/attachment.html>


More information about the cpl mailing list