<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
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 <i>expression : '[' expresssion expression, expression
']' </i><i><br>
</i><br>
Bogdan<br>
<br>
<div class="moz-cite-prefix">On 11/8/2015 9:30 PM, Marius Ungureanu
wrote:<br>
</div>
<blockquote
cite="mid:CAMqd76SzGCJGT8ifJE0X9dg_he_XXb0GpGvkxyXF4qUMgpZPNw@mail.gmail.com"
type="cite">
<p dir="ltr">Salut,</p>
<p dir="ltr">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?</p>
<p dir="ltr">Mersi,<br>
Marius</p>
<div class="gmail_quote">On Nov 8, 2015 9:07 PM, "Bogdan Nitulescu
via cpl" <<a moz-do-not-send="true"
href="mailto:cpl@cursuri.cs.pub.ro">cpl@cursuri.cs.pub.ro</a>>
wrote:<br type="attribution">
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"> Salut, <br>
<br>
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:<br>
<br>
[id] - nu poate fi decat dispatch , [] care nu este precedat
de o expresie nu e index<br>
expr[id] - nu poate fi decat index <br>
[id1 [id2]] - e interpretat unic ca dublu dispatch,
id1(id2()) intr-un limbaj C-like;<br>
[id1[id2].id3] - nu poate fi decat un dispatch + index
(id1[id2]).id3() in C++<br>
<br>
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.<br>
<br>
(BTW, Testele pe care le-am pus noi pentru tema sunt un pic
mai permisive si nu acopera chiar toate cazurile de mai sus)<br>
<br>
Bogdan<br>
<br>
<div>On 11/8/2015 4:42 PM, Marius Ungureanu via cpl wrote:<br>
</div>
<blockquote type="cite">
<p dir="ltr">On Nov 8, 2015 4:43 AM, "Marius Ungureanu"
<<a moz-do-not-send="true"
href="mailto:therzok@gmail.com" target="_blank">therzok@gmail.com</a>>
wrote:<br>
><br>
> Salut,<br>
><br>
> Avem cazul in care avem un dispatch, iar primul
argument este de tip substring:<br>
><br>
> * Caz real: [hello [3, 5].length]<br>
> * Caz teoretic: [expresie argument]<br>
><br>
> Gramatica define ambigua in acest context pentru ca
am avea 2 cazuri<br>
> de conflict:<br>
><br>
> [expresie <inceput de dispatch>]<br>
> sau<br>
> [expresie_substring]<br>
><br>
<br>
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.</p>
<p dir="ltr">[hello[</p>
<p dir="ltr">Poate fi:</p>
<p dir="ltr">[expresie <inceput argument dispatch>]<br>
[expresie <inceput substring>]</p>
<p dir="ltr">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).</p>
<p dir="ltr">Acelasi conflict exista si pentru
implementarea vectorilor.</p>
<p dir="ltr">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.</p>
<p dir="ltr">Multumesc,<br>
Marius</p>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
cpl mailing list
<a moz-do-not-send="true" href="mailto:cpl@cursuri.cs.pub.ro" target="_blank">cpl@cursuri.cs.pub.ro</a>
<a moz-do-not-send="true" href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/cpl" target="_blank">http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/cpl</a>
</pre>
</blockquote>
<br>
</div>
<br>
_______________________________________________<br>
cpl mailing list<br>
<a moz-do-not-send="true" href="mailto:cpl@cursuri.cs.pub.ro">cpl@cursuri.cs.pub.ro</a><br>
<a moz-do-not-send="true"
href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/cpl"
rel="noreferrer" target="_blank">http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/cpl</a><br>
<br>
</blockquote>
</div>
</blockquote>
<br>
</body>
</html>