DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(bison.info.gz) Stack Overflow

Info Catalog (bison.info.gz) Generalized LR Parsing (bison.info.gz) Algorithm
 
 Stack Overflow, and How to Avoid It
 ===================================
 
    The Bison parser stack can overflow if too many tokens are shifted
 and not reduced.  When this happens, the parser function `yyparse'
 returns a nonzero value, pausing only to call `yyerror' to report the
 overflow.
 
    Becaue Bison parsers have growing stacks, hitting the upper limit
 usually results from using a right recursion instead of a left
 recursion,  Recursive Rules Recursion.
 
    By defining the macro `YYMAXDEPTH', you can control how deep the
 parser stack can become before a stack overflow occurs.  Define the
 macro with a value that is an integer.  This value is the maximum number
 of tokens that can be shifted (and not reduced) before overflow.  It
 must be a constant expression whose value is known at compile time.
 
    The stack space allowed is not necessarily allocated.  If you
 specify a large value for `YYMAXDEPTH', the parser actually allocates a
 small stack at first, and then makes it bigger by stages as needed.
 This increasing allocation happens automatically and silently.
 Therefore, you do not need to make `YYMAXDEPTH' painfully small merely
 to save space for ordinary inputs that do not need much stack.
 
    The default value of `YYMAXDEPTH', if you do not define it, is 10000.
 
    You can control how much stack is allocated initially by defining the
 macro `YYINITDEPTH'.  This value too must be a compile-time constant
 integer.  The default is 200.
 
    Because of semantical differences between C and C++, the LALR(1)
 parsers in C produced by Bison by compiled as C++ cannot grow.  In this
 precise case (compiling a C parser as C++) you are suggested to grow
 `YYINITDEPTH'.  In the near future, a C++ output output will be
 provided which addresses this issue.
 
Info Catalog (bison.info.gz) Generalized LR Parsing (bison.info.gz) Algorithm
automatically generated byinfo2html