Potrebujem poradiť s nasledovný problémom:
Mám parser ktorý pomocou parsovacej tabulky vygenerovanej z LL(1) gramatiky vytvára derivačný strom. V podstate každý terminál ktorý akceptuje token zo vstupu spusti sématicku funkciu a tá podľa potreby vloží objekt do derivačného stromu (+kontroluje správnosť identifikátorov...). Ak sa narazí na neterminál tak sa nahradí za jeho pravidlo získané z tabuľky a spustí sa sématická funkcia. Každý terminál/neterminál môže mať vlastnú sématickú funkciu ktorá robí dačo iné.
Problém je že niektoré časti sa nedajú zapísať pomocou LL(k) gramatiky:
príklad:
ID < ID > ID; //ID je terminál akceptujúci token reprezentujúci slovo, zvyšok sú terminálne symboly akceptujúce operátory
//v parsovanom texte môžu nastať nasledovné konflikty:
typ < template_parameter > meno_premennej ; //deklaracia lokalnej premennej
premenna1 < premenna2 > premenna3 ; //obyčajný výraz
Zatiaľ to mám tak, že neterminál môže obsahovať konfliktné pravidlá ak majú rôznu prioritu. V parsovacej tabuľke niesu potom pointre na pravidlá ale vektor pravidiel zoradených podla priority. Ak nastane chyba pri volaní sématickej funkcie pri neterminály tak sa parser pokusí nájsť iné pravidlo z nižšou prioritou.
Dá sa to riešiť lepším spôsobom?