<div dir="ltr">Buna seara,<br><br>Imi cer scuze pentru ca ce urmeaza va fi extrem de lung si detaliat, dar incerc sa explic cat mai detaliat dubiile mele, in speranta ca va fi mai usor sa observati o greseala in felul in care gandesc.<div><br></div><div><br></div><div><div>Am o curiozitate pentru cazul urmator:</div><div><br></div><div><font face="monospace, monospace">[           substring            . id ]</font></div><div><font face="monospace, monospace">[ id [       expr        , expr] . id ]</font></div><div><font face="monospace, monospace">[ id [operatie_de_scadere, expr] . id ]</font></div><div><font face="monospace, monospace">[ id [     id - id       ,  id ] . id ]</font></div><div><font face="monospace, monospace">              ^</font></div><div><font face="monospace, monospace">Problema mea  |  e aici (minusul)</font></div><div>Pentru simplitate, consideram:</div><div><font face="monospace, monospace">[ string [ a - b, c ] . length ]</font></div><div><br></div><div>Consider ca in momentul in care avem:</div><div>Stiva: <font face="monospace, monospace">[ string [ a</font></div><div>Lookahead: <font face="monospace, monospace">-</font></div><div>Este conflict. In acest moment se parsa una din urmatoarele:</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>a) primul argument al unui dispatch pe ID-ul string:</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">           </span><font face="monospace, monospace">[<id> <expr>]</font></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>acest prim argument este tot un dispatch.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>b) obiectul pentru care se va face dispatch pe o metoda:</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">               </span><font face="monospace, monospace">[<expr>.<id>]</font></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>acest obiect este un substring.</div><div><br></div><div>a) se va face shift.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>Consideram ca se va apela metoda "string" cu argumentul ce va fi intors de dispatchul interior (pe care il parsam acum).</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>iar dispatch-ul interior va intoarce rezultatul apelului metodei "a" cu argumentul minus_unar</div><div><br></div><div>b) se va face reduce.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>inca incercam sa construim expresia dinaintea punctului. stim ca este un substring pentru ca deja am parsat "string[a".</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>se pare ca primul argument al substringului va fi operatie de scadere. Va trebui sa reducem "a"-ul de pe stiva la operand stang al operatiei de scadere.</div><div><br></div><div><br></div><div>Sper ca deja ati observat ceva gresit in logica mea. Daca nu</div><div>Pasii pe care i-am urmat:</div><div><br></div><div>1. Stiva goala.</div><div>Lookahead : '['</div><div>Shift pe toate regulile de dispatch si static dispatch</div><div><br></div><div>2. Stiva: '['</div><div>Lookahead: ID</div><div>Shift pe regulile de static dispatch (dar nu ne intereseaza asta acum).</div><div><font face="monospace, monospace">Shift pe regulile de dispatch: [<expr>.<id> args] si [<id> args]</font></div><div><font face="monospace, monospace">                                  ^</font></div><div><font face="monospace, monospace">                                  | si pe toate expresiile care incep cu ID </font></div><div><font face="monospace, monospace">                                  | si se poate sa se faca dispatch pe ele</font></div><div>deci doar regula de substring de forma: <id>[<expr>, <expr>]</div><div><br></div><div>3. Stiva: '[' ID</div><div>Lookahead: '['</div><div>Poate fi un dispatch pe ID iar acum incepe argumentul 1, care este tot un dispatch</div><div>exemplu: [ ID argument_care_este_tot_dispatch ]</div><div>Deci shift pe toate regulile de (static) dispatch</div><div>De asemenea poate fi expresia substring in dispatch</div><div><font face="monospace, monospace">[<a href="http://expr.id">expr.id</a> args], deci [ substring.<id> args ],</font></div><div><font face="monospace, monospace">   deci [ ID [ expr, expr ].id args ]</font></div><div><font face="monospace, monospace">             ^ Pot urma toate expresiile ce pot fi</font></div><div><font face="monospace, monospace">             | argumente valide pentru substring</font></div><div><br></div><div>4. Stiva: '[' ID '['</div><div>Lookahead: ID</div><div>In continuare poate face parte din primul argument al unui dispatch pe un ID:</div><div>exemplu: [ID argument_care_este_tot_dispatch_si_care_incepe_cu_id ]</div><div>sau      [ ID [ID argumente_sau_nu] ]</div><div>Deci shift pe regula de dispatch </div><div><br></div><div>In continuare poate fi primul argument al unui substring.</div><div>Shift pe toate expresiile care incep cu ID si sunt argumente valide pentru substring.</div><div>[ ID [ expresie_care_intoarce_un_index_si_incepe_cu_ID , expr ] ]</div><div><br></div><div>5. Stiva '[' ID '[' ID</div><div>Lookahead: '-'</div><div>Poate fi inceputul unui prim argument al dispatchului interior (un minus unar)</div><div>[ ID [ID argument_minus_unar] ]</div><div>Poate fi mijlocul unei operatii de scadere, care este primul argument din substring</div><div>[ ID [operatie_de_scadere_care_incepe_cu_id, arg] ]</div><div><br></div><div>Pot sa reduc ID-ul ca argument stang al operatiei de scadere.</div><div>Pot sa fac shift si sa consider ca incepe primul argument din dispatch: un minus unar.</div><div><br></div><div>Presupun ca solutia ar fi sa nu putem face reduce in aceasta situatie.</div><div>Adica sa nu pot reduce o operatie de scadere intr-un substring pana nu ajung la virgula.</div></div><div>I don't know, I'm lost.</div></div>