Related articles |
---|
how to debug yacc file using gdb linwei@iscs.nus.sg (1994-12-31) |
Re: how to debug yacc file using gdb fjh@munta.cs.mu.OZ.AU (1995-01-04) |
Re: how to debug yacc file using gdb copperma@grenoble.rxrc.xerox.com (1995-01-06) |
Newsgroups: | comp.compilers |
From: | fjh@munta.cs.mu.OZ.AU (Fergus Henderson) |
Keywords: | yacc, debug |
Organization: | Computer Science, University of Melbourne, Australia |
References: | 94-12-152 |
Date: | Wed, 4 Jan 1995 02:07:24 GMT |
linwei@iscs.nus.sg (Lin Wei) writes:
>I am using lex & yacc to build a compiler for a mini-pascal with parallel
>extension. I found yacc a nice tool, however it was clumsy to debug
>y.tab.c using gdb. As you know, without -l option, I can debug my parser.y
>using gdb. But in this way, it seems impossible to print/display yacc's
>attribute variables like $$ and $1 because they are considered as history
>variables by gdb. I have tried \$\$ and something like that, but I
>failed. Do you have any idea that I can debug .y file in gdb and also I
>can view $$'s value.
With the yacc implementation we have here, `$$' gets translated into
`yyval' and `$n' gets translated into `yypvt[n-m]' where m is the
number of symbols on the RHS of the rule.
So if you have a rule
expr : expr binop expr { ... }
then you can use the following gdb commands:
print yyval # print $$
print yypvt[-2] # print $1
print yypvt[-1] # print $2
print yypvt[0] # print $3
Note that `yypvt' is a local variable of yyparse(), so you may need
to use gdb's `up' command to move into the scope of yyparse() before
you can print it's values.
Different yacc implementations might use different variable names -
have a look at the part of the y.tab.c file produced by yacc which
contains the actions, and you be able to see how `$$' and `$n' get
translated for your particular yacc implementation.
--
Fergus Henderson - fjh@munta.cs.mu.oz.au
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.