Estoy usando Jison (Bison) para crear un lenguaje de marcado simple. Soy claramente nuevo en esto, pero las pequeñas variaciones funcionan muy bien. Simplemente no entiendo la fuente del conflicto S/R.Gramática que resuelve Mayúsculas/Reducir conflictos
No parece importar que 'Texto' sea devuelto por dos acciones lexer (con diferentes Condiciones de inicio) y esto me gusta porque parece permitir que la gramática tenga menos reglas y porque los mensajes de error para el usuario son consistente. Intenté hacer que la regla 'Texto' fuera común, independientemente del contexto, y también intenté asignar a cada token un nombre diferente, pero no parece tener ningún efecto en los Conflictos S/R cuando todo está en conjunto.
El analizador se SUPONE para crear un objeto json con texto plano, sub-arreglos y varios nodos especiales.
Especificación:
/* 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*/
;
Advertencias:
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 ]
Diferentes algoritmos generadores tienen más o menos problemas, pero todos ellos parecen tener problemas.
Gracias!
Gran respuesta. Y me gusta la sugerencia que ha agregado, eso me abrió la mente a un mayor procesamiento en esas acciones, no había pensado en eso. Todavía estoy trabajando en hacerlo funcionar. ¿El orden de las apariencias de reglas importa? –
También me ayudó a darme cuenta de que las acciones no son realmente necesarias para las discusiones de resolución de conflictos. –
Actualicé la gramática - TODAVÍA no puedo verla. –