"%baseclass-header"[ \t]*       {
                                    BEGIN pxstring;
                                    return Parser::BASECLASS_HEADER;
                                }

"%baseclass-preinclude"[ \t]*   {
                                    BEGIN pxstring;
                                    return Parser::BASECLASS_PREINCLUDE;
                                }
"%class-header"[ \t]*           {
                                    BEGIN pxstring;
                                    return Parser::CLASS_HEADER;
                                }
"%class-name"                   return Parser::CLASS_NAME;
"%debug"                        return Parser::DEBUGFLAG;
"%error-verbose"                return Parser::ERROR_VERBOSE;
"%expect"                       return Parser::EXPECT;
"%filenames"[ \t]*              {
                                    BEGIN pxstring;
                                    return Parser::FILENAMES;
                                }
"%implementation-header"[ \t]*  {
                                    BEGIN pxstring;
                                    return Parser::IMPLEMENTATION_HEADER;
                                }
"%left"                         return Parser::LEFT;
"%lines"                        return Parser::LINES;
"%locationstruct"               return Parser::LOCATIONSTRUCT;
"%lsp-needed"                   return Parser::LSP_NEEDED;
"%ltype"[ \t]*                  {
                                    BEGIN xstring;
                                    return Parser::LTYPE;
                                }
"%namespace"                    return Parser::NAMESPACE;
"%negative-dollar-indices"      return Parser::NEG_DOLLAR;
"%nonassoc"                     return Parser::NONASSOC;
"%parsefun-source"[ \t]*        {
                                    BEGIN pxstring;
                                    return Parser::PARSEFUN_SOURCE;
                                }
"%prec"                         return Parser::PREC;
"%print"                        {
                                    BEGIN pxstring;
                                    return Parser::PRINT;
                                }
"%right"                        return Parser::RIGHT;
"%required-tokens"              return Parser::REQUIRED;
"%scanner"[ \t]*                {
                                    BEGIN pxstring;
                                    return Parser::SCANNER_INCLUDE;
                                }
"%scanner-token-function"[ \t]* {
                                    BEGIN pxstring;
                                    return Parser::SCANNER_TOKEN_FUNCTION;
                                }
"%start"                        return Parser::START;
"%stype"                        {
                                    BEGIN xstring;
                                    return Parser::STYPE;
                                }
"%token"                        return Parser::TOKEN;
"%type"                         return Parser::TYPE;
"%union"                        return Parser::UNION;
"%%"                            return Parser::TWO_PERCENTS;

"'"                             {
                                    BEGIN quote;
                                    yymore();
                                }

"\""                            {
                                    BEGIN string;
                                    yymore();
                                }

{IDENT}                         return Parser::IDENTIFIER;

[0-9]+                          return setNumber();

.                               return yytext[0];

    /*
        At the end of input, check to see if we should switch back to a
        previously pushed file
    */

<<EOF>>                     {
                                if (!popSource(YY_CURRENT_BUFFER))
                                    yyterminate();
                            }
