Estoy escribiendo un programa de análisis de una lengua, y el escáner está diseñado paranodos en el árbol de análisis sintáctico que no deberían estar allí
- sea también vuelven terminales que no sean necesarios (por ejemplo whitespacing) O
- no para hacerlo
según una bandera booleana.
Ahora, en el analizador sintáctico, no quiero saturar la gramática con todos esos terminales, deberían ser tragados de alguna manera "automágicamente" por el árbol de análisis sintáctico que estoy construyendo.
Para hacer esto "mágico", pensé que encadenaría los terminales (simplemente vinculados a la lista circular) para poder iterarlos y "completar los espacios en blanco" a medida que ocurre la reducción (estoy usando un LALR (1)) generador de analizador).
Parece una idea sensata, aunque hay un problema. ¿Recuerdas que dije "regresar ... o no"? En el escenario (2), liberaría la terminal, porque ¿quién sabe qué viene después? Y no quiero ninguna pérdida de memoria.
Pero en el escenario (1), no puedo liberar el terminal, porque basándome en ellos decidiré en reducciones adicionales donde el proceso de "rellenar los espacios en blanco" debería detenerse.
No puedo liberarlo condicional tampoco, por la misma razón: no sé lo que viene a continuación. ¿Qué ocurre si no se activa ningún proceso de "rellenar espacios en blanco"? ¿Qué pasa si no habrá más reducción en absoluto?
¿Has tenido problemas similares? ¿Cómo lo has resuelto?
Nota: esto es todo en mi mente y es posible que no lo haya explicado con suficiente claridad, por favor pregunte y voy a editar mi pregunta. El escenario es en realidad un poco más complejo, no estoy escribiendo esto desde cero, donde podría usar mi imaginación, lo estoy integrando en otra cosa, así que bien podría ser que responda con "No puedo hacer eso debido a las limitaciones del entorno ".
Adición
La única muy buena idea que viene a la mente es que tenedor y mejorar el generador de análisis, que ya he hecho en algunos lugares menores aquí y allá, para superar algunos de los limitaciones que mencioné arriba.
Sé lo que quiero, y quiero los espacios en blanco en el árbol. De Verdad. Es justo lo que quiero no es lo que la gente quiere habitualmente. Y tengo buenas razones para tener esos tokens en el árbol. Muy buenas razones. Sin esas razones, no lo haría en primer lugar. Pero gracias por advertirme al respecto. – Flavius
Sí, es claro que sabes lo que quieres. Decir que tiene muy buenas razones sin explicarlas, o en particular díganos el efecto final que espera lograr, lo va a lograr "la respuesta convencional dice ...". ... Si desea tomar la ruta no convencional, puede generalizar lo que hicimos con DMS: adjunte sus micro-tokens (espacios en blanco y comentarios) como una secuencia a los tokens de idioma. –
Sí, eso es lo que hice, tal como lo mencioné en la pregunta, usando listas vinculadas, aunque terminé usando una doblemente enlazada. Sin embargo, el consumo de memoria aún me molesta, dos miembros extra de puntero para los tokens son bastantes, ¿no? No sé, supongo que terminaré este prototipo y veré cómo funciona. – Flavius