manpagez: man pages & more
info bison
Home | html | info | man
[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.1.5.1 Split Symbols

The interface is as follows.

Method on parser: int yylex (semantic_type* yylval, location_type* yylloc, type1 arg1, ...)
Method on parser: int yylex (semantic_type* yylval, type1 arg1, ...)

Return the next token. Its type is the return value, its semantic value and location (if enabled) being yylval and yylloc. Invocations of ‘%lex-param {type1 arg1}’ yield additional arguments.

Note that when using variants, the interface for yylex is the same, but yylval is handled differently.

Regular union-based code in Lex scanner typically look like:

[0-9]+   {
           yylval.ival = text_to_int (yytext);
           return yy::parser::INTEGER;
         }
[a-z]+   {
           yylval.sval = new std::string (yytext);
           return yy::parser::IDENTIFIER;
         }

Using variants, yylval is already constructed, but it is not initialized. So the code would look like:

[0-9]+   {
           yylval.build<int>() = text_to_int (yytext);
           return yy::parser::INTEGER;
         }
[a-z]+   {
           yylval.build<std::string> = yytext;
           return yy::parser::IDENTIFIER;
         }

or

[0-9]+   {
           yylval.build(text_to_int (yytext));
           return yy::parser::INTEGER;
         }
[a-z]+   {
           yylval.build(yytext);
           return yy::parser::IDENTIFIER;
         }

This document was generated on December 1, 2013 using texi2html 5.0.

© manpagez.com 2000-2024
Individual documents may contain additional copyright information.