help-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to change the default action for selected rules?


From: Akim Demaille
Subject: Re: How to change the default action for selected rules?
Date: Tue, 8 Oct 2013 10:41:01 +0200

Le 4 oct. 2013 à 15:35, Markus Elfring <address@hidden> a écrit :

>>> - Is a conversion possible without the specification of a specific data 
>>> type in
>>> a directive like "%token"?
>> 
>> I'm not sure to understand what you mean.  If '0' is expected
>> to have a value, then you should declare it
> 
> I added also the rule '. { return yy::my_parser::make_SINGLE_CHARACTER(yytext,
> loc); }' and the specification '%token <std::string> SINGLE_CHARACTER
> "uncategorised_character"' to my source file settings in the meantime.
> Unfortunately, I stumble on the message "lexer.l:36: warning, rule cannot be
> matched".
> https://sourceforge.net/p/flex/bugs/161/

It makes plenty of sense to me that that "rule cannot be matched",
it is not a bug in Flex.  Your file, stripped down:

ws [ \n\a\b\f\r\t\v]
id [^.=\ \n\a\b\f\r\t\v]

%%


{ws}+   { return yy::my_parser::make_SEPARATION(yytext, loc); }
{id}+   { return yy::my_parser::make_IDENTIFIER(yytext, loc); }
=       { return yy::my_parser::make_ASSIGN(loc); }
"."     { Return yy::my_parser::make_DOT(loc); }
.       { return yy::my_parser::make_SINGLE_CHARACTER(yytext, loc); }
<<EOF>> { return yy::my_parser::make_END(loc); }

Note that {ws} + '.' + '=' is exactly the converse of {id}, so there
is nothing else to match.

It's weird that SINGLE_CHARACTER is taking a char*
instead of a char (i.e., I expect to see '*yytext',
not 'yytext' there).

>>> I would like to avoid
>>> the repetition of similar actions behind them. It would be more 
>>> "convenient" to
>>> choose a different default action for selected rules, wouldn't it?
>> 
>> One usually does not need that, as this kind of job is typically
>> left to the scanner/lexer, not to the parser.
> 
> I am also thinking about a design approach with a scannerless parser like the
> way it is provided by the class library "Spirit".
> http://stackoverflow.com/questions/2224373/scannerless-parser-generators

Scannerless is a fine idea, however I fear that with Bison
you'll get bad performances.  Please, keep us posted.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]