Here's a hack to do what I want:
#define YYDEBUG 1
#define YYFPRINTF yyfprintf
void yyfprintf
(FILE *hfile, // Ignore this
char *lpszFmt, // Format string
...) // Zero or more arguments
{
va_list vl;
int i1, i2, i3;
static char szTemp[256] = {' '};
char szTemp2[128];
va_start (vl, lpszFmt);
// Bison uses no more than three arguments.
// Note we must grab them separately this way
// as using va_arg in the argument list to
// wsprintf pushes the arguments in reverse
// order.
i1 = va_arg (vl, int);
i2 = va_arg (vl, int);
i3 = va_arg (vl, int);
wsprintf (szTemp2,
lpszFmt,
i1,
i2,
i3);
// Accumulate into local buffer because
// Bison calls this function multiple
// times for the same line, terminating
// the last call for the line with a LF.
lstrcat (szTemp, szTemp2);
// Check last character.
i1 = lstrlen (szTemp);
// If it's a LF, it's time to flush the buffer.
if (szTemp[i1 - 1] EQ 'n')
{
szTemp[i1 - 1] = ' '; // Remove trailing LF
// because we're
displaying
// in a GUI.
DbgMsg (szTemp); // Display in my debugger window.
szTemp[0] = ' '; // Restart the buffer.
} // End IF/ELSE
va_end (vl);
} // End yyfprintf
On 10/26/2006 11:58 AM, Bob Smith wrote:
> I must be missing something. I am already using
yyerror () to capture
> error messages ("syntax error", "memory
exhausted", etc.), but I want to
> capture debugging output as well. That output is, by
default, sent
> directly to stderr by the YYFPRINTF #define.
>
> Also, I see no reference to a global yytext in the C
output file
> (perhaps you meant ctxt?).
>
> Sorry, but I don't see how yyerror can be used to
accomplish this.
>
> On 10/26/2006 2:50 AM, Ramaswamy R wrote:
>> You should be able to use the function yyerror to
capture the debug
>> messages. The function prototype would be like this
in a re-entrant
>> parser -
>>
>>
>> int yyerror(void *ctxt, const char *msg)
>> {
>> if ( 0 == yytext[0] )
>> return fprintf(stderr, "n%s.", msg);
>> else
>> return fprintf(stderr, "n%s at
'%s'.", msg, asntext);
>> }
>>
>> I believe the ctxt would not be there in a non
re-entrant version
>> (globals
>> being used if context information is required). You
can use this
>> function to
>> do what you want with the message. Hope this helps.
--
____________________________________________________________
___
Bob Smith - bsmith sudleyplace.com - http://www.sudleyplace.com
_______________________________________________
help-bison gnu.org http
://lists.gnu.org/mailman/listinfo/help-bison |