Sto utilizzando Jison (Bison) per creare un linguaggio di markup semplice. Sono chiaramente nuovo a questo, ma le leggere variazioni stanno funzionando molto bene. Semplicemente non capisco la fonte del conflitto S/R.Risoluzione problemi grammaticali Spostamento/riduzione dei conflitti
Non sembra importare che "Testo" sia restituito da due azioni di lexer (con condizioni di avvio diverse) e mi piace perché sembra che la grammatica abbia meno regole e perché i messaggi di errore all'utente sono coerente. Ho provato a rendere la regola "Testo" comune indipendentemente dal contesto e ho anche provato a assegnare a ciascun token un nome diverso, ma non sembra avere alcun effetto sui conflitti S/R quando è tutto insieme.
Il parser è SUPPONENTE per creare un oggetto json con matrici di testo semplice, sotto-array e vari nodi speciali.
Specifica:
/* lexical grammar */
%lex
%s bracketed
%%
<bracketed>(\\.|[^\\\,\[\]])+ { yytext = yytext.replace(/\\(.)/g, '$1'); return 'Text'; }
<INITIAL>(\\.|[^\\\[])+ { yytext = yytext.replace(/\\(.)/g, '$1'); return 'Text'; }
"[" { this.begin('bracketed'); return '['; }
"]" { this.popState(); return ']'; }
"," return ','
<<EOF>> return 'END'
/lex
%start template
%%
template
: sentence END
;
sentence
: /* empty */
| sentence Text
| sentence '[' ']'
| sentence '[' dynamic ']'
;
dynamic
: sentence
/*| dynamic ',' sentence*/
;
Avvertenze:
Conflict in grammar: multiple actions possible when lookahead token is ] in state 5
- reduce by rule: sentence ->
- shift token (then go to state 6)
States with conflicts:
State 5
sentence -> sentence [ .] #lookaheads= END Text [ ]
sentence -> sentence [ .dynamic ] #lookaheads= END Text [ ]
dynamic -> .sentence #lookaheads= ]
sentence -> . #lookaheads= ] Text [
sentence -> .sentence Text
sentence -> .sentence [ ]
sentence -> .sentence [ dynamic ]
diversi algoritmi generatore hanno più o meno problemi, ma tutti sembrano avere problemi.
Grazie!
Ottima risposta. E mi piace il suggerimento che hai aggiunto - che mi ha aperto la mente a una maggiore elaborazione in quelle azioni, non ci avevo pensato. Sto ancora lavorando per far funzionare tutto comunque. L'ordine delle apparizioni delle regole è importante? –
Mi hai anche aiutato a capire che le azioni non sono realmente necessarie per le discussioni sulla risoluzione dei conflitti. –
Ho aggiornato la grammatica - ANCORA non riesco a vederlo. –