Hola buenas,<div><br></div><div> Tengo una dudilla a ver si me podeis echar una mano.</div><div><br></div><div> Estoy haciendo un proyecto con bison, flex y C (un compliador para un lenguaje ficticio).</div><div><br></div>
<div> Hay una libreria para tratamiento de errores en la que se declara:</div><div><br></div><div>extern int <b>lineno</b>,<b>linepos</b>;</div><div>extern char <b>yytext</b>[];</div><div> </div><div>y se redefine:</div><div>
<br></div><div>void <b>yyerror </b>(char *<b>mens</b>)</div><div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>fprintf (stderr, "ERROR SINTACTICO! (%d, %d, %s): %s\n", <b>lineno</b>, <b>linepos</b>, <b>yytext</b>, <b>mens</b>);</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>exit (1);</div><div>}</div></div><div><br></div><div>Esta funcion la llama bison cuando se produce un error sintactico y las variables externas son de flex.</div>
<div><br></div><div>lineno lleva el numero de la linea</div><div>linepos lleva la posicion dentro de la linea</div><div>yytext[] lleva la cadena de texto que corresponde al ultimo "token" leido del fichero fuente</div>
<div><br></div><div>El problema es que aunque cuando hago printf en el propio funte flex de yytext aparece la cadena correctamente pero al usar la funcion de error yyerror sale caracteres extraños como si la memoria donde se encuentra el puntero se hubiera perdido.</div>
<div><br></div><div><br></div>