[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
YYABORT in GLR (was: Re: (no subject))
From: |
Joel E. Denny |
Subject: |
YYABORT in GLR (was: Re: (no subject)) |
Date: |
Tue, 12 Dec 2006 14:39:56 -0500 (EST) |
On Tue, 12 Dec 2006, Hans Aberg wrote:
> [Please try to give descriptive subjects; replies should cc the Help-Bison
> list.]
>
> On 12 Dec 2006, at 12:28, address@hidden wrote:
>
> > I'm working on a prototype of a COBOL-parser in bison using a GLR-parser.
> > I have a question considering YYABORT:
> > When the parsing-process uses more then one parser, and one of them
> > encounters this macro, will only this parser stop, or all of them. And if
> > the second is the case, is there a way to accomplish the first?
>
> The first case. You can check out, in the parser that Bison writes, what the
> macro does: it just jumps to a place where parser is terminated.
No, it's the second case. Maybe there's a confusion in terminology here:
YYABORT stops the single GLR parser (that is, yyparse). There is no
mechanism for stopping just one of the child LALR(1) parsers via semantic
actions. The problem is that no semantic actions are actually performed
until only one of these parsers is left. The other parsers are eliminated
by true syntax errors (not YYERROR), %dprec, or %merge.
In the case of %merge, the semantic actions recorded for each child parser
will be performed. In the semantic actions where you were planning to
invoke YYABORT, you could return some sort of NULL value and write your
%merge functions to discard NULL children. I've not used this approach
myself, but one caveat I'm aware of is that it's not always clear where
the parser will choose to try a merge.
- (no subject), timo . du . four, 2006/12/12
- Re: (no subject), Hans Aberg, 2006/12/12
- YYABORT in GLR (was: Re: (no subject)),
Joel E. Denny <=