Re: Question about token stack

Ervin Hegedüs <[email protected]>
Newsgroups gmane.comp.parsers.bison.general
Message-ID <[email protected]>
Hi Akim,

thanks again.

On Sun, Aug 30, 2020 at 05:04:50PM +0200, Akim Demaille wrote:
> 
> 
> > Le 30 août 2020 à 16:36, Ervin Hegedüs <[email protected]> a écrit :
> > 
> > %destructor { printf("free() called\n"); free ($$); } <*>
> > 
> > but it never called, and valgrind still shows that the block is
> > still reachable.
> 
> You should add debug traces and study them.  Pay special attention
> to the error recovery sequence.
> 
> > Btw I reviewed the generated code, but I'm afriad this destructor
> > called only when the parser run into the error state.
> 
> Yes, that's what the doc says, and that is what I believed is
> what you are trying to address.

yes, now I think too it's enough.
 
> > Now I thought what happens if the scanner found an unrecognized
> > token after the previous was pushed into stack - that item is
> > sill at there. So I'm still curious, how can I clear the whole
> > stack.
> 
> Since you don't have error-recovery, your stack will be cleared.
> Show us your debug traces (yydebug = 1).

in my parser code I got:

#ifdef YYDEBUG
  yydebug = 1;
#endif

and I compiled the code:
bison -d myparser.y
flex -d mylexer.l
gcc ...

the output is:

--accepting rule at line 52 ("ConfKey2")
--accepting rule at line 67 (" ")
--accepting rule at line 55 ("fo")
This is a configuration directive and argument: 'ConfKey2' 'fo'
--accepting rule at line 68 ("'")
UNKNOWN TOKEN: ''' in file: badconf3.conf, line 1, state: ST_CONFIG_DIRECTIVE
--accepting rule at line 55 ("o")
Parse error: syntax error in file , line 1

In this case the problem is the configuration argument contains a
' (single-quoted mark):

ConfKey2 fo'o



So many thanks! :)


a.


ps: I've added an own implelemtation. I stored all address of
symbols which pushed to stack, and in yyerror() I iterate that
list and freed all address. This is just a workaround, but I got
what I expected. But then I saw in case of error (it doesn't
matter where error occurred) only one item on the stack.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.