2011-04-15 15 views
6

¿Cómo puedo pasar un parámetro adicional (no el token minor del tipo YYSTYPE) a la función yypush_parse()?Bison - parámetro adicional a un analizador sintáctico y puro

El analizador es de hecho reentrante, pero esta variable adicional es crucial para la seguridad de subprocesos de la aplicación en la que necesito integrar mi analizador (es una extensión PHP, entonces estamos hablando de TSRM).

No puedo deshacerme de ese parámetro, porque dentro del código de acción Voy a llamar a las funciones que generarán un AST en el espacio de usuario de una forma accesible.

he tratado de cortar alrededor YYPUSH_DECLS y funciona por lo que se declara la función se refiere, pero unos pocos miles de LOC abajo viene la implementación de yypush_parse, y no puedo ver ninguna manera de sobrescribir la firma de la función donde la implementación de yypush_parse comienza.

YYPARSE_PARAM solo se utiliza cuando el analizador no es un archivo push (por lo que puedo decir), pero en mi caso NECESITO que lo presione debido a las cosas que tengo que hacer en el ciclo de procesamiento, después de antes de agregar un nuevo token a la pila de análisis.

Así que me pregunto si hay una %directive o algo que puede ayudar.

Por otro lado, realmente creo que YYPARSE_PARAM se debe usar hasta donde esté definido, sin importar qué tipo de analizador sea. Es una pena que no lo sea.

Respuesta

0

%parse-param. YYPARSE_PARAM está en desuso y no debe utilizarse.

+0

Lamentablemente, '% de análisis sintáctico-param' es para el yyparse()' función, no 'yypush_parse()'. –

+0

¿Qué estás hablando? Funciona para mí, bisontes 2.4.3 – Flavius

+0

bien: vamos a revisar mi comentario - por desgracia, la documentación no menciona que '% de análisis sintáctico-param' puede ser utilizado con' yypush_parse() ', AFAICS. Su evidencia empírica sugiere que se puede usar; quizás deberíamos obtener una nota para el equipo de Bison que este bit no se encuentra en la documentación. –

Cuestiones relacionadas