Używam Jison (Bison) do tworzenia prostego języka znaczników. Jestem na to zupełnie nowy, ale niewielkie różnice działają bardzo dobrze. Po prostu nie rozumiem źródła konfliktu S/R.Rozdzielczość właściwości gramatyki Przesunięcie/zmniejszenie liczby konfliktów
Nie ma znaczenia, że tekst jest zwracany przez dwie akcje leksujące (z różnymi warunkami początkowymi) i podoba mi się to, ponieważ wydaje się, że gramatyka ma mniej reguł i ponieważ komunikaty o błędach dla użytkownika są zgodny. Próbowałem stworzyć regułę "Tekstu" powszechnie, niezależnie od kontekstu, a także próbowałem nadać każdemu tokenowi inną nazwę, ale wydaje się, że nie ma to żadnego wpływu na Konflikt S/R, kiedy wszystko jest razem.
Parser jest SUPPOSED, aby utworzyć obiekt Json za pomocą zwykłego tekstu, pod-macierzy i różnych specjalnych węzłów.
Specyfikacja:
/* 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*/
;
Ostrzeżenia:
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 ]
Różne algorytmy generatory mają więcej lub mniej problemów, ale wszystkie one wydają się mieć kłopoty.
Dzięki!
Świetna odpowiedź. I podoba mi się sugestia, którą dodałeś - która otworzyła mój umysł na większe przetwarzanie w tych działaniach, nie pomyślała o tym. Nadal pracuję nad tym, aby wszystko działało. Czy kolejność pojawiania się reguł ma znaczenie? –
Pomogłeś mi także zrozumieć, że działania nie są tak naprawdę potrzebne do dyskusji o rozwiązywaniu konfliktów. –
Zaktualizowałem gramatykę - NADAL nie mogę jej zobaczyć. –