/* Generated by re2c 0.13.5 on Fri May 22 17:28:34 2009 */
#line 1 "idl.re"
/*=============================================================================
    Boost.Wave: A Standard compliant C++ preprocessor library

    Sample: IDL lexer 

    http://www.boost.org/

    Copyright (c) 2001-2010 Hartmut Kaiser. Distributed under the Boost
    Software License, Version 1.0. (See accompanying file
    LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/

#include <ctime>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <boost/config.hpp>

#if defined(BOOST_HAS_UNISTD_H)
#include <unistd.h>
#else
#include <io.h>
#endif 

#include <boost/assert.hpp>
#include <boost/detail/workaround.hpp>

// reuse the token ids and re2c helper functions from the default C++ lexer
#include <boost/wave/token_ids.hpp>
#include <boost/wave/cpplexer/re2clex/aq.hpp>
#include <boost/wave/cpplexer/re2clex/scanner.hpp>
#include <boost/wave/cpplexer/cpplexer_exceptions.hpp>

#include "idl_re.hpp"

#if defined(_MSC_VER) && !defined(__COMO__)
#pragma warning (disable: 4101)     // 'foo' : unreferenced local variable
#pragma warning (disable: 4102)     // 'foo' : unreferenced label
#endif

#define BOOST_WAVE_BSIZE     196608

#define YYCTYPE   uchar
#define YYCURSOR  cursor
#define YYLIMIT   s->lim
#define YYMARKER  s->ptr
#define YYFILL(n) {cursor = fill(s, cursor);}

//#define BOOST_WAVE_RET(i)    {s->cur = cursor; return (i);}
#define BOOST_WAVE_RET(i)    \
    { \
        s->line += count_backslash_newlines(s, cursor); \
        s->cur = cursor; \
        return (i); \
    } \
    /**/

///////////////////////////////////////////////////////////////////////////////
namespace boost {
namespace wave {
namespace idllexer {
namespace re2clex {

#define RE2C_ASSERT BOOST_ASSERT

int 
get_one_char(boost::wave::cpplexer::re2clex::Scanner *s)
{
    using namespace boost::wave::cpplexer::re2clex;
    if (0 != s->act) {
        RE2C_ASSERT(s->first != 0 && s->last != 0);
        RE2C_ASSERT(s->first <= s->act && s->act <= s->last);
        if (s->act < s->last) 
            return *(s->act)++;
    }
    return -1;
}

std::ptrdiff_t 
rewind_stream (boost::wave::cpplexer::re2clex::Scanner *s, int cnt)
{
    if (0 != s->act) {
        RE2C_ASSERT(s->first != 0 && s->last != 0);
        s->act += cnt;
        RE2C_ASSERT(s->first <= s->act && s->act <= s->last);
        return s->act - s->first;
    }
    return 0;
}

std::size_t 
get_first_eol_offset(boost::wave::cpplexer::re2clex::Scanner* s)
{
    if (!AQ_EMPTY(s->eol_offsets))
    {
        return s->eol_offsets->queue[s->eol_offsets->head];
    }
    else
    {
        return (unsigned int)-1;
    }
}

void 
adjust_eol_offsets(boost::wave::cpplexer::re2clex::Scanner* s, 
    std::size_t adjustment)
{
    boost::wave::cpplexer::re2clex::aq_queue q;
    std::size_t i;
    
    if (!s->eol_offsets)
        s->eol_offsets = boost::wave::cpplexer::re2clex::aq_create();

    q = s->eol_offsets;

    if (AQ_EMPTY(q))
        return;

    i = q->head;
    while (i != q->tail)
    {
        if (adjustment > q->queue[i])
            q->queue[i] = 0;
        else
            q->queue[i] -= adjustment;
        ++i;
        if (i == q->max_size)
            i = 0;
    }
    if (adjustment > q->queue[i])
        q->queue[i] = 0;
    else
        q->queue[i] -= adjustment;
}

int 
count_backslash_newlines(boost::wave::cpplexer::re2clex::Scanner *s, 
    boost::wave::cpplexer::re2clex::uchar *cursor)
{
    using namespace boost::wave::cpplexer::re2clex;

    std::size_t diff, offset;
    int skipped = 0;
    
    /* figure out how many backslash-newlines skipped over unknowingly. */
    diff = cursor - s->bot;
    offset = get_first_eol_offset(s);
    while (offset <= diff && offset != (unsigned int)-1)
    {
        skipped++;
        boost::wave::cpplexer::re2clex::aq_pop(s->eol_offsets);
        offset = get_first_eol_offset(s);
    }
    return skipped;
}

bool is_backslash(
  boost::wave::cpplexer::re2clex::uchar *p, 
  boost::wave::cpplexer::re2clex::uchar *end, int &len)
{
    if (*p == '\\') {
        len = 1;
        return true;
    }
    else if (*p == '?' && *(p+1) == '?' && (p+2 < end && *(p+2) == '/')) {
        len = 3;
        return true;
    }
    return false;
}

boost::wave::cpplexer::re2clex::uchar *
fill(boost::wave::cpplexer::re2clex::Scanner *s, 
    boost::wave::cpplexer::re2clex::uchar *cursor)
{
    using namespace std;    // some systems have memcpy etc. in namespace std
    using namespace boost::wave::cpplexer::re2clex;

    if(!s->eof)
    {
        uchar* p;
        std::ptrdiff_t cnt = s->tok - s->bot;
        if(cnt)
        {
            memcpy(s->bot, s->tok, s->lim - s->tok);
            s->tok = s->bot;
            s->ptr -= cnt;
            cursor -= cnt;
            s->lim -= cnt;
            adjust_eol_offsets(s, cnt);
        }

        if((s->top - s->lim) < BOOST_WAVE_BSIZE)
        {
            uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BOOST_WAVE_BSIZE)*sizeof(uchar));
            if (buf == 0)
            {
                using namespace std;      // some systems have printf in std
                if (0 != s->error_proc) {
                    (*s->error_proc)(s, 
                        cpplexer::lexing_exception::unexpected_error,
                        "Out of memory!");
                }
                else 
                    printf("Out of memory!\n");
                    
                /* get the scanner to stop */
                *cursor = 0;
                return cursor;
            }

            memcpy(buf, s->tok, s->lim - s->tok);
            s->tok = buf;
            s->ptr = &buf[s->ptr - s->bot];
            cursor = &buf[cursor - s->bot];
            s->lim = &buf[s->lim - s->bot];
            s->top = &s->lim[BOOST_WAVE_BSIZE];
            free(s->bot);
            s->bot = buf;
        }

        if (s->act != 0) {
            cnt = s->last - s->act;
            if (cnt > BOOST_WAVE_BSIZE)
                cnt = BOOST_WAVE_BSIZE;
            memcpy(s->lim, s->act, cnt);
            s->act += cnt;
            if (cnt != BOOST_WAVE_BSIZE) 
            {
                s->eof = &s->lim[cnt]; *(s->eof)++ = '\0';
            }
        }
        
        /* backslash-newline erasing time */

        /* first scan for backslash-newline and erase them */
        for (p = s->lim; p < s->lim + cnt - 2; ++p)
        {
            int len = 0;
            if (is_backslash(p, s->lim + cnt, len))
            {
                if (*(p+len) == '\n')
                {
                    int offset = len + 1;
                    memmove(p, p + offset, s->lim + cnt - p - offset);
                    cnt -= offset;
                    --p;
                    aq_enqueue(s->eol_offsets, p - s->bot + 1);    
                }
                else if (*(p+len) == '\r')
                {
                    if (*(p+len+1) == '\n')
                    {
                        int offset = len + 2;
                        memmove(p, p + offset, s->lim + cnt - p - offset);
                        cnt -= offset;
                        --p;
                    }
                    else
                    {
                        int offset = len + 1;
                        memmove(p, p + offset, s->lim + cnt - p - offset);
                        cnt -= offset;
                        --p;
                    }
                    aq_enqueue(s->eol_offsets, p - s->bot + 1);    
                }
            }
        }

        /* FIXME: the following code should be fixed to recognize correctly the 
                  trigraph backslash token */

        /* check to see if what we just read ends in a backslash */
        if (cnt >= 2)
        {
            uchar last = s->lim[cnt-1];
            uchar last2 = s->lim[cnt-2];
            /* check \ EOB */
            if (last == '\\')
            {
                int next = get_one_char(s);
                /* check for \ \n or \ \r or \ \r \n straddling the border */
                if (next == '\n')
                {
                    --cnt; /* chop the final \, we've already read the \n. */
                    boost::wave::cpplexer::re2clex::aq_enqueue(s->eol_offsets, 
                        cnt + (s->lim - s->bot));    
                }
                else if (next == '\r')
                {
                    int next2 = get_one_char(s);
                    if (next2 == '\n')
                    {
                        --cnt; /* skip the backslash */
                    }
                    else
                    {
                        /* rewind one, and skip one char */
                        rewind_stream(s, -1);
                        --cnt;
                    }
                    boost::wave::cpplexer::re2clex::aq_enqueue(s->eol_offsets, 
                        cnt + (s->lim - s->bot));    
                }
                else if (next != -1) /* -1 means end of file */
                {
                    /* next was something else, so rewind the stream */
                    rewind_stream(s, -1);
                }
            }
            /* check \ \r EOB */
            else if (last == '\r' && last2 == '\\')
            {
                int next = get_one_char(s);
                if (next == '\n')
                {
                    cnt -= 2; /* skip the \ \r */
                }
                else
                {
                    /* rewind one, and skip two chars */
                    rewind_stream(s, -1);
                    cnt -= 2;
                }
                boost::wave::cpplexer::re2clex::aq_enqueue(s->eol_offsets, 
                    cnt + (s->lim - s->bot));    
            }
            /* check \ \n EOB */
            else if (last == '\n' && last2 == '\\')
            {
                cnt -= 2;
                boost::wave::cpplexer::re2clex::aq_enqueue(s->eol_offsets, 
                    cnt + (s->lim - s->bot));    
            }
        }
        
        s->lim += cnt;
        if (s->eof) /* eof needs adjusting if we erased backslash-newlines */
        {
            s->eof = s->lim;
            *(s->eof)++ = '\0';
        }
    }
    return cursor;
}

boost::wave::token_id  
scan(boost::wave::cpplexer::re2clex::Scanner *s)
{
    using namespace boost::wave::cpplexer::re2clex;

    uchar *cursor = s->tok = s->cur;

#line 378 "idl.re"



#line 366 "idl_re.cpp"
{
    YYCTYPE yych;
    unsigned int yyaccept = 0;
    static const unsigned char yybm[] = {
        /* table 1 .. 8: 0 */
          0,   0,   0,   0,   0,   0,   0,   0, 
          0,  60,  32,  56,  56,  64,   0,   0, 
          0,   0,   0,   0,   0,   0,   0,   0, 
          0,   0,   0,   0,   0,   0,   0,   0, 
         60,  56,  40,  56,  56,  56,  56,  56, 
         56,  56, 152,  56,  56,  56,  56,  56, 
         59,  59,  59,  59,  59,  59,  59,  59, 
         58,  58,  56,  56,  56,  56,  48,  56, 
         56,  58,  58,  58,  58,  58,  58,  58, 
         58,  58,  58,  58,  58,  58,  58,  58, 
         58,  58,  58,  58,  58,  58,  58,  58, 
         58,  58,  58,  56,  56,  56,  56,  58, 
         56,  58,  58,  58,  58,  58,  58,  58, 
         58,  58,  58,  58,  58,  58,  58,  58, 
         58,  58,  58,  58,  58,  58,  58,  58, 
         58,  58,  58,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
         56,  56,  56,  56,  56,  56,  56,  56, 
        /* table 9 .. 15: 256 */
          0,   0,   0,   0,   0,   0,   0,   0, 
          0,  70,   0,  70,  70,   0,   0,   0, 
          0,   0,   0,   0,   0,   0,   0,   0, 
          0,   0,   0,   0,   0,   0,   0,   0, 
         70,  68,  64,  68,  68,  68,  68,   4, 
         68,  68,  68,  68,  68,  68,  68,  68, 
        204, 204, 204, 204, 204, 204, 204, 204, 
        204, 204,  68,  68,  68,  68,  68,  16, 
         68,  76,  76,  76,  76,  76,  76,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  32,  68,  68,  68, 
         68,  76,  76,  76,  76,  76,  76,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
         68,  68,  68,  68,  68,  68,  68,  68, 
    };

    if ((YYLIMIT - YYCURSOR) < 12) YYFILL(12);
    yych = *YYCURSOR;
    switch (yych) {
    case 0x00:    goto yy69;
    case '\t':
    case '\v':
    case '\f':
    case ' ':    goto yy64;
    case '\n':    goto yy66;
    case '\r':    goto yy68;
    case '!':    goto yy45;
    case '"':    goto yy63;
    case '#':    goto yy15;
    case '%':    goto yy35;
    case '&':    goto yy39;
    case '\'':    goto yy62;
    case '(':    goto yy17;
    case ')':    goto yy19;
    case '*':    goto yy33;
    case '+':    goto yy29;
    case ',':    goto yy53;
    case '-':    goto yy31;
    case '.':    goto yy27;
    case '/':    goto yy2;
    case '0':    goto yy59;
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':    goto yy61;
    case ':':    goto yy23;
    case ';':    goto yy21;
    case '<':    goto yy49;
    case '=':    goto yy47;
    case '>':    goto yy51;
    case '?':    goto yy25;
    case 'A':
    case 'B':
    case 'C':
    case 'D':
    case 'E':
    case 'G':
    case 'H':
    case 'I':
    case 'J':
    case 'K':
    case 'M':
    case 'N':
    case 'O':
    case 'P':
    case 'Q':
    case 'R':
    case 'S':
    case 'U':
    case 'V':
    case 'W':
    case 'X':
    case 'Y':
    case 'Z':
    case '_':
    case 'a':
    case 'b':
    case 'c':
    case 'd':
    case 'e':
    case 'f':
    case 'g':
    case 'h':
    case 'i':
    case 'j':
    case 'k':
    case 'l':
    case 'm':
    case 'n':
    case 'o':
    case 'p':
    case 'q':
    case 'r':
    case 's':
    case 't':
    case 'u':
    case 'v':
    case 'w':
    case 'x':
    case 'y':
    case 'z':    goto yy55;
    case 'F':    goto yy6;
    case 'L':    goto yy56;
    case 'T':    goto yy4;
    case '[':    goto yy11;
    case '\\':    goto yy57;
    case ']':    goto yy13;
    case '^':    goto yy37;
    case '{':    goto yy7;
    case '|':    goto yy41;
    case '}':    goto yy9;
    case '~':    goto yy43;
    default:    goto yy71;
    }
yy2:
    ++YYCURSOR;
    if ((yych = *YYCURSOR) == '*') goto yy356;
    if (yych == '/') goto yy354;
#line 402 "idl.re"
    { BOOST_WAVE_RET(T_DIVIDE); }
#line 548 "idl_re.cpp"
yy4:
    yyaccept = 0;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych == 'R') goto yy350;
    goto yy202;
yy5:
#line 425 "idl.re"
    { BOOST_WAVE_RET(T_IDENTIFIER); }
#line 557 "idl_re.cpp"
yy6:
    yyaccept = 0;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych == 'A') goto yy345;
    goto yy202;
yy7:
    ++YYCURSOR;
#line 387 "idl.re"
    { BOOST_WAVE_RET(T_LEFTBRACE); }
#line 567 "idl_re.cpp"
yy9:
    ++YYCURSOR;
#line 388 "idl.re"
    { BOOST_WAVE_RET(T_RIGHTBRACE); }
#line 572 "idl_re.cpp"
yy11:
    ++YYCURSOR;
#line 389 "idl.re"
    { BOOST_WAVE_RET(T_LEFTBRACKET); }
#line 577 "idl_re.cpp"
yy13:
    ++YYCURSOR;
#line 390 "idl.re"
    { BOOST_WAVE_RET(T_RIGHTBRACKET); }
#line 582 "idl_re.cpp"
yy15:
    yyaccept = 1;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych <= 'e') {
        if (yych <= '"') {
            if (yych <= '\t') {
                if (yych >= '\t') goto yy239;
            } else {
                if (yych == ' ') goto yy239;
            }
        } else {
            if (yych <= '.') {
                if (yych <= '#') goto yy343;
            } else {
                if (yych <= '/') goto yy239;
                if (yych >= 'd') goto yy239;
            }
        }
    } else {
        if (yych <= 'o') {
            if (yych <= 'i') {
                if (yych >= 'i') goto yy239;
            } else {
                if (yych == 'l') goto yy239;
            }
        } else {
            if (yych <= 'u') {
                if (yych <= 'p') goto yy239;
                if (yych >= 'u') goto yy239;
            } else {
                if (yych == 'w') goto yy239;
            }
        }
    }
yy16:
#line 391 "idl.re"
    { BOOST_WAVE_RET(T_POUND); }
#line 620 "idl_re.cpp"
yy17:
    ++YYCURSOR;
#line 393 "idl.re"
    { BOOST_WAVE_RET(T_LEFTPAREN); }
#line 625 "idl_re.cpp"
yy19:
    ++YYCURSOR;
#line 394 "idl.re"
    { BOOST_WAVE_RET(T_RIGHTPAREN); }
#line 630 "idl_re.cpp"
yy21:
    ++YYCURSOR;
#line 395 "idl.re"
    { BOOST_WAVE_RET(T_SEMICOLON); }
#line 635 "idl_re.cpp"
yy23:
    ++YYCURSOR;
#line 396 "idl.re"
    { BOOST_WAVE_RET(T_COLON); }
#line 640 "idl_re.cpp"
yy25:
    yyaccept = 2;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych == '?') goto yy341;
yy26:
#line 397 "idl.re"
    { BOOST_WAVE_RET(T_QUESTION_MARK); }
#line 648 "idl_re.cpp"
yy27:
    ++YYCURSOR;
    if ((yych = *YYCURSOR) <= '/') goto yy28;
    if (yych <= '9') goto yy168;
yy28:
#line 398 "idl.re"
    { BOOST_WAVE_RET(T_DOT); }
#line 656 "idl_re.cpp"
yy29:
    ++YYCURSOR;
    if ((yych = *YYCURSOR) == '+') goto yy339;
#line 399 "idl.re"
    { BOOST_WAVE_RET(T_PLUS); }
#line 662 "idl_re.cpp"
yy31:
    ++YYCURSOR;
    if ((yych = *YYCURSOR) == '-') goto yy337;
#line 400 "idl.re"
    { BOOST_WAVE_RET(T_MINUS); }
#line 668 "idl_re.cpp"
yy33:
    ++YYCURSOR;
#line 401 "idl.re"
    { BOOST_WAVE_RET(T_STAR); }
#line 673 "idl_re.cpp"
yy35:
    yyaccept = 3;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych == ':') goto yy238;
yy36:
#line 403 "idl.re"
    { BOOST_WAVE_RET(T_PERCENT); }
#line 681 "idl_re.cpp"
yy37:
    ++YYCURSOR;
#line 404 "idl.re"
    { BOOST_WAVE_RET(T_XOR); }
#line 686 "idl_re.cpp"
yy39:
    ++YYCURSOR;
    if ((yych = *YYCURSOR) == '&') goto yy236;
#line 405 "idl.re"
    { BOOST_WAVE_RET(T_AND); }
#line 692 "idl_re.cpp"
yy41:
    ++YYCURSOR;
    if ((yych = *YYCURSOR) == '|') goto yy234;
#line 406 "idl.re"
    { BOOST_WAVE_RET(T_OR); }
#line 698 "idl_re.cpp"
yy43:
    ++YYCURSOR;
#line 407 "idl.re"
    { BOOST_WAVE_RET(T_COMPL); }
#line 703 "idl_re.cpp"
yy45:
    ++YYCURSOR;
    if ((yych = *YYCURSOR) == '=') goto yy232;
#line 408 "idl.re"
    { BOOST_WAVE_RET(T_NOT); }
#line 709 "idl_re.cpp"
yy47:
    ++YYCURSOR;
    if ((yych = *YYCURSOR) == '=') goto yy230;
#line 409 "idl.re"
    { BOOST_WAVE_RET(T_ASSIGN); }
#line 715 "idl_re.cpp"
yy49:
    ++YYCURSOR;
    if ((yych = *YYCURSOR) <= ';') goto yy50;
    if (yych <= '<') goto yy228;
    if (yych <= '=') goto yy226;
yy50:
#line 410 "idl.re"
    { BOOST_WAVE_RET(T_LESS); }
#line 724 "idl_re.cpp"
yy51:
    ++YYCURSOR;
    if ((yych = *YYCURSOR) <= '<') goto yy52;
    if (yych <= '=') goto yy222;
    if (yych <= '>') goto yy224;
yy52:
#line 411 "idl.re"
    { BOOST_WAVE_RET(T_GREATER); }
#line 733 "idl_re.cpp"
yy53:
    ++YYCURSOR;
#line 422 "idl.re"
    { BOOST_WAVE_RET(T_COMMA); }
#line 738 "idl_re.cpp"
yy55:
    yyaccept = 0;
    yych = *(YYMARKER = ++YYCURSOR);
    goto yy202;
yy56:
    yyaccept = 0;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yybm[0+yych] & 2) {
        goto yy201;
    }
    if (yych <= '\'') {
        if (yych == '"') goto yy75;
        if (yych <= '&') goto yy5;
        goto yy221;
    } else {
        if (yych <= '?') {
            if (yych <= '>') goto yy5;
            goto yy204;
        } else {
            if (yych == '\\') goto yy203;
            goto yy5;
        }
    }
yy57:
    yyaccept = 4;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych == 'U') goto yy193;
    if (yych == 'u') goto yy192;
yy58:
#line 492 "idl.re"
    {
        BOOST_WAVE_RET(TOKEN_FROM_ID(*s->tok, UnknownTokenType));
    }
#line 772 "idl_re.cpp"
yy59:
    yyaccept = 5;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yybm[0+yych] & 1) {
        goto yy185;
    }
    if (yych <= 'U') {
        if (yych <= 'C') {
            if (yych <= '.') {
                if (yych >= '.') goto yy168;
            } else {
                if (yych <= '/') goto yy60;
                if (yych <= '9') goto yy187;
            }
        } else {
            if (yych <= 'K') {
                if (yych <= 'D') goto yy164;
                if (yych <= 'E') goto yy171;
            } else {
                if (yych <= 'L') goto yy173;
                if (yych >= 'U') goto yy172;
            }
        }
    } else {
        if (yych <= 'k') {
            if (yych <= 'c') {
                if (yych == 'X') goto yy189;
            } else {
                if (yych <= 'd') goto yy164;
                if (yych <= 'e') goto yy171;
            }
        } else {
            if (yych <= 'u') {
                if (yych <= 'l') goto yy173;
                if (yych >= 'u') goto yy172;
            } else {
                if (yych == 'x') goto yy189;
            }
        }
    }
yy60:
#line 428 "idl.re"
    { BOOST_WAVE_RET(T_INTLIT); }
#line 816 "idl_re.cpp"
yy61:
    yyaccept = 5;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yybm[256+yych] & 128) {
        goto yy166;
    }
    if (yych <= 'T') {
        if (yych <= 'D') {
            if (yych == '.') goto yy168;
            if (yych <= 'C') goto yy60;
            goto yy164;
        } else {
            if (yych <= 'E') goto yy171;
            if (yych == 'L') goto yy173;
            goto yy60;
        }
    } else {
        if (yych <= 'e') {
            if (yych <= 'U') goto yy172;
            if (yych <= 'c') goto yy60;
            if (yych <= 'd') goto yy164;
            goto yy171;
        } else {
            if (yych <= 'l') {
                if (yych <= 'k') goto yy60;
                goto yy173;
            } else {
                if (yych == 'u') goto yy172;
                goto yy60;
            }
        }
    }
yy62:
    yyaccept = 4;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych <= '\f') {
        if (yych == '\t') goto yy121;
        if (yych <= '\n') goto yy58;
        goto yy121;
    } else {
        if (yych <= 0x1F) goto yy58;
        if (yych == '\'') goto yy58;
        goto yy121;
    }
yy63:
    yyaccept = 4;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych <= '\n') {
        if (yych == '\t') goto yy76;
        goto yy58;
    } else {
        if (yych <= '\f') goto yy76;
        if (yych <= 0x1F) goto yy58;
        goto yy76;
    }
yy64:
    ++YYCURSOR;
    yych = *YYCURSOR;
    goto yy74;
yy65:
#line 467 "idl.re"
    { BOOST_WAVE_RET(T_SPACE); }
#line 879 "idl_re.cpp"
yy66:
    ++YYCURSOR;
yy67:
#line 470 "idl.re"
    {
        s->line++;
        BOOST_WAVE_RET(T_NEWLINE);
    }
#line 888 "idl_re.cpp"
yy68:
    yych = *++YYCURSOR;
    if (yych == '\n') goto yy72;
    goto yy67;
yy69:
    ++YYCURSOR;
#line 476 "idl.re"
    {
        if(cursor != s->eof) 
        {
            using namespace std;      // some systems have printf in std
            if (0 != s->error_proc) {
                (*s->error_proc)(s, 
                    cpplexer::lexing_exception::generic_lexing_error,
                    "'\\000' in input stream");
            }
            else
                printf("Error: 0 in file\n");
        }
        BOOST_WAVE_RET(T_EOF);
    }
#line 910 "idl_re.cpp"
yy71:
    yych = *++YYCURSOR;
    goto yy58;
yy72:
    yych = *++YYCURSOR;
    goto yy67;
yy73:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
yy74:
    if (yybm[256+yych] & 2) {
        goto yy73;
    }
    goto yy65;
yy75:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
yy76:
    if (yybm[256+yych] & 4) {
        goto yy75;
    }
    if (yych <= '!') goto yy77;
    if (yych <= '"') goto yy80;
    if (yych <= '[') goto yy78;
    goto yy79;
yy77:
    YYCURSOR = YYMARKER;
    if (yyaccept <= 6) {
        if (yyaccept <= 3) {
            if (yyaccept <= 1) {
                if (yyaccept <= 0) {
                    goto yy5;
                } else {
                    goto yy16;
                }
            } else {
                if (yyaccept <= 2) {
                    goto yy26;
                } else {
                    goto yy36;
                }
            }
        } else {
            if (yyaccept <= 5) {
                if (yyaccept <= 4) {
                    goto yy58;
                } else {
                    goto yy60;
                }
            } else {
                goto yy81;
            }
        }
    } else {
        if (yyaccept <= 9) {
            if (yyaccept <= 8) {
                if (yyaccept <= 7) {
                    goto yy131;
                } else {
                    goto yy170;
                }
            } else {
                goto yy294;
            }
        } else {
            if (yyaccept <= 11) {
                if (yyaccept <= 10) {
                    goto yy302;
                } else {
                    goto yy349;
                }
            } else {
                goto yy353;
            }
        }
    }
yy78:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 4) {
        goto yy75;
    }
    if (yych <= '!') goto yy77;
    if (yych <= '"') goto yy80;
    if (yych <= '[') goto yy91;
yy79:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '`') {
        if (yych <= '7') {
            if (yych <= '&') {
                if (yych == '"') goto yy75;
                goto yy77;
            } else {
                if (yych <= '\'') goto yy75;
                if (yych <= '/') goto yy77;
                goto yy86;
            }
        } else {
            if (yych <= 'T') {
                if (yych == '?') goto yy84;
                goto yy77;
            } else {
                if (yych <= 'U') goto yy83;
                if (yych == '\\') goto yy75;
                goto yy77;
            }
        }
    } else {
        if (yych <= 'r') {
            if (yych <= 'f') {
                if (yych <= 'b') goto yy75;
                if (yych <= 'e') goto yy77;
                goto yy75;
            } else {
                if (yych == 'n') goto yy75;
                if (yych <= 'q') goto yy77;
                goto yy75;
            }
        } else {
            if (yych <= 'u') {
                if (yych <= 's') goto yy77;
                if (yych <= 't') goto yy75;
                goto yy82;
            } else {
                if (yych <= 'v') goto yy75;
                if (yych == 'x') goto yy85;
                goto yy77;
            }
        }
    }
yy80:
    ++YYCURSOR;
yy81:
#line 440 "idl.re"
    { BOOST_WAVE_RET(T_STRINGLIT); }
#line 1051 "idl_re.cpp"
yy82:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy117;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy117;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy117;
        goto yy77;
    }
yy83:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy110;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy110;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy110;
        goto yy77;
    }
yy84:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 4) {
        goto yy75;
    }
    if (yych <= '!') goto yy77;
    if (yych <= '"') goto yy80;
    if (yych <= '[') goto yy90;
    goto yy79;
yy85:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 8) {
        goto yy88;
    }
    goto yy77;
yy86:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '"') {
        if (yych <= '\n') {
            if (yych == '\t') goto yy75;
            goto yy77;
        } else {
            if (yych <= '\f') goto yy75;
            if (yych <= 0x1F) goto yy77;
            if (yych <= '!') goto yy75;
            goto yy80;
        }
    } else {
        if (yych <= '>') {
            if (yych <= '/') goto yy75;
            if (yych >= '8') goto yy75;
        } else {
            if (yych <= '?') goto yy78;
            if (yych == '\\') goto yy79;
            goto yy75;
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 4) {
        goto yy75;
    }
    if (yych <= '!') goto yy77;
    if (yych <= '"') goto yy80;
    if (yych <= '[') goto yy78;
    goto yy79;
yy88:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 8) {
        goto yy88;
    }
    if (yych <= '!') {
        if (yych <= '\n') {
            if (yych == '\t') goto yy75;
            goto yy77;
        } else {
            if (yych <= '\f') goto yy75;
            if (yych <= 0x1F) goto yy77;
            goto yy75;
        }
    } else {
        if (yych <= '?') {
            if (yych <= '"') goto yy80;
            if (yych <= '>') goto yy75;
            goto yy78;
        } else {
            if (yych == '\\') goto yy79;
            goto yy75;
        }
    }
yy90:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 4) {
        goto yy75;
    }
    if (yych <= '!') goto yy77;
    if (yych <= '"') goto yy80;
    if (yych >= '\\') goto yy79;
yy91:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 16) {
        goto yy91;
    }
    if (yych <= '!') {
        if (yych <= '\n') {
            if (yych == '\t') goto yy75;
            goto yy77;
        } else {
            if (yych <= '\f') goto yy75;
            if (yych <= 0x1F) goto yy77;
            goto yy75;
        }
    } else {
        if (yych <= '/') {
            if (yych <= '"') goto yy80;
            if (yych <= '.') goto yy75;
        } else {
            if (yych == '\\') goto yy79;
            goto yy75;
        }
    }
yy93:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 32) {
        goto yy93;
    }
    if (yych <= '7') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy75;
            if (yych <= '\n') goto yy77;
            goto yy75;
        } else {
            if (yych <= '!') {
                if (yych <= 0x1F) goto yy77;
                goto yy75;
            } else {
                if (yych <= '"') goto yy97;
                if (yych <= '/') goto yy75;
                goto yy86;
            }
        }
    } else {
        if (yych <= 'U') {
            if (yych == '?') goto yy98;
            if (yych <= 'T') goto yy75;
            goto yy96;
        } else {
            if (yych <= 'u') {
                if (yych <= 't') goto yy75;
            } else {
                if (yych == 'x') goto yy88;
                goto yy75;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy75;
            if (yych <= '\n') goto yy77;
            goto yy75;
        } else {
            if (yych <= '!') {
                if (yych <= 0x1F) goto yy77;
                goto yy75;
            } else {
                if (yych <= '"') goto yy80;
                if (yych <= '/') goto yy75;
                goto yy107;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy78;
            if (yych <= '@') goto yy75;
            goto yy107;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy75;
                goto yy79;
            } else {
                if (yych <= '`') goto yy75;
                if (yych <= 'f') goto yy107;
                goto yy75;
            }
        }
    }
yy96:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy75;
            if (yych <= '\n') goto yy77;
            goto yy75;
        } else {
            if (yych <= '!') {
                if (yych <= 0x1F) goto yy77;
                goto yy75;
            } else {
                if (yych <= '"') goto yy80;
                if (yych <= '/') goto yy75;
                goto yy100;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy78;
            if (yych <= '@') goto yy75;
            goto yy100;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy75;
                goto yy79;
            } else {
                if (yych <= '`') goto yy75;
                if (yych <= 'f') goto yy100;
                goto yy75;
            }
        }
    }
yy97:
    yyaccept = 6;
    YYMARKER = ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 4) {
        goto yy75;
    }
    if (yych <= '!') goto yy81;
    if (yych <= '"') goto yy80;
    if (yych <= '[') goto yy78;
    goto yy79;
yy98:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 4) {
        goto yy75;
    }
    if (yych <= '!') goto yy77;
    if (yych <= '"') goto yy80;
    if (yych >= '\\') goto yy79;
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 16) {
        goto yy91;
    }
    if (yych <= '!') {
        if (yych <= '\n') {
            if (yych == '\t') goto yy75;
            goto yy77;
        } else {
            if (yych <= '\f') goto yy75;
            if (yych <= 0x1F) goto yy77;
            goto yy75;
        }
    } else {
        if (yych <= '/') {
            if (yych <= '"') goto yy80;
            if (yych <= '.') goto yy75;
            goto yy93;
        } else {
            if (yych == '\\') goto yy79;
            goto yy75;
        }
    }
yy100:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy75;
            if (yych <= '\n') goto yy77;
            goto yy75;
        } else {
            if (yych <= '!') {
                if (yych <= 0x1F) goto yy77;
                goto yy75;
            } else {
                if (yych <= '"') goto yy80;
                if (yych <= '/') goto yy75;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy78;
            if (yych <= '@') goto yy75;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy75;
                goto yy79;
            } else {
                if (yych <= '`') goto yy75;
                if (yych >= 'g') goto yy75;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy75;
            if (yych <= '\n') goto yy77;
            goto yy75;
        } else {
            if (yych <= '!') {
                if (yych <= 0x1F) goto yy77;
                goto yy75;
            } else {
                if (yych <= '"') goto yy80;
                if (yych <= '/') goto yy75;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy78;
            if (yych <= '@') goto yy75;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy75;
                goto yy79;
            } else {
                if (yych <= '`') goto yy75;
                if (yych >= 'g') goto yy75;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy75;
            if (yych <= '\n') goto yy77;
            goto yy75;
        } else {
            if (yych <= '!') {
                if (yych <= 0x1F) goto yy77;
                goto yy75;
            } else {
                if (yych <= '"') goto yy80;
                if (yych <= '/') goto yy75;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy78;
            if (yych <= '@') goto yy75;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy75;
                goto yy79;
            } else {
                if (yych <= '`') goto yy75;
                if (yych >= 'g') goto yy75;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy75;
            if (yych <= '\n') goto yy77;
            goto yy75;
        } else {
            if (yych <= '!') {
                if (yych <= 0x1F) goto yy77;
                goto yy75;
            } else {
                if (yych <= '"') goto yy80;
                if (yych <= '/') goto yy75;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy78;
            if (yych <= '@') goto yy75;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy75;
                goto yy79;
            } else {
                if (yych <= '`') goto yy75;
                if (yych >= 'g') goto yy75;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy75;
            if (yych <= '\n') goto yy77;
            goto yy75;
        } else {
            if (yych <= '!') {
                if (yych <= 0x1F) goto yy77;
                goto yy75;
            } else {
                if (yych <= '"') goto yy80;
                if (yych <= '/') goto yy75;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy78;
            if (yych <= '@') goto yy75;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy75;
                goto yy79;
            } else {
                if (yych <= '`') goto yy75;
                if (yych >= 'g') goto yy75;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy75;
            if (yych <= '\n') goto yy77;
            goto yy75;
        } else {
            if (yych <= '!') {
                if (yych <= 0x1F) goto yy77;
                goto yy75;
            } else {
                if (yych <= '"') goto yy80;
                if (yych <= '/') goto yy75;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy78;
            if (yych <= '@') goto yy75;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy75;
                goto yy79;
            } else {
                if (yych <= '`') goto yy75;
                if (yych >= 'g') goto yy75;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 4) {
        goto yy75;
    }
    if (yych <= '!') goto yy77;
    if (yych <= '"') goto yy80;
    if (yych <= '[') goto yy78;
    goto yy79;
yy107:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy75;
            if (yych <= '\n') goto yy77;
            goto yy75;
        } else {
            if (yych <= '!') {
                if (yych <= 0x1F) goto yy77;
                goto yy75;
            } else {
                if (yych <= '"') goto yy80;
                if (yych <= '/') goto yy75;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy78;
            if (yych <= '@') goto yy75;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy75;
                goto yy79;
            } else {
                if (yych <= '`') goto yy75;
                if (yych >= 'g') goto yy75;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy75;
            if (yych <= '\n') goto yy77;
            goto yy75;
        } else {
            if (yych <= '!') {
                if (yych <= 0x1F) goto yy77;
                goto yy75;
            } else {
                if (yych <= '"') goto yy80;
                if (yych <= '/') goto yy75;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy78;
            if (yych <= '@') goto yy75;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy75;
                goto yy79;
            } else {
                if (yych <= '`') goto yy75;
                if (yych >= 'g') goto yy75;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 4) {
        goto yy75;
    }
    if (yych <= '!') goto yy77;
    if (yych <= '"') goto yy80;
    if (yych <= '[') goto yy78;
    goto yy79;
yy110:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy111;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy111:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy112;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy112:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy113;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy113:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy114;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy114:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy115;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy115:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy116;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy116:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy75;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy75;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy75;
        goto yy77;
    }
yy117:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy118;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy118:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy119;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy119:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy75;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy75;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy75;
        goto yy77;
    }
yy120:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
yy121:
    if (yybm[256+yych] & 64) {
        goto yy120;
    }
    if (yych <= '&') goto yy77;
    if (yych <= '\'') goto yy130;
    if (yych >= '\\') goto yy123;
yy122:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 64) {
        goto yy120;
    }
    if (yych <= '&') goto yy77;
    if (yych <= '\'') goto yy130;
    if (yych <= '[') goto yy135;
yy123:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '`') {
        if (yych <= '7') {
            if (yych <= '&') {
                if (yych == '"') goto yy120;
                goto yy77;
            } else {
                if (yych <= '\'') goto yy120;
                if (yych <= '/') goto yy77;
                goto yy128;
            }
        } else {
            if (yych <= 'T') {
                if (yych == '?') goto yy126;
                goto yy77;
            } else {
                if (yych <= 'U') goto yy125;
                if (yych == '\\') goto yy120;
                goto yy77;
            }
        }
    } else {
        if (yych <= 'r') {
            if (yych <= 'f') {
                if (yych <= 'b') goto yy120;
                if (yych <= 'e') goto yy77;
                goto yy120;
            } else {
                if (yych == 'n') goto yy120;
                if (yych <= 'q') goto yy77;
                goto yy120;
            }
        } else {
            if (yych <= 'u') {
                if (yych <= 's') goto yy77;
                if (yych <= 't') goto yy120;
            } else {
                if (yych <= 'v') goto yy120;
                if (yych == 'x') goto yy127;
                goto yy77;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy161;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy161;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy161;
        goto yy77;
    }
yy125:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy154;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy154;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy154;
        goto yy77;
    }
yy126:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 64) {
        goto yy120;
    }
    if (yych <= '&') goto yy77;
    if (yych <= '\'') goto yy130;
    if (yych <= '[') goto yy134;
    goto yy123;
yy127:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy132;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy132;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy132;
        goto yy77;
    }
yy128:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '\'') {
        if (yych <= '\n') {
            if (yych == '\t') goto yy120;
            goto yy77;
        } else {
            if (yych <= '\f') goto yy120;
            if (yych <= 0x1F) goto yy77;
            if (yych <= '&') goto yy120;
            goto yy130;
        }
    } else {
        if (yych <= '>') {
            if (yych <= '/') goto yy120;
            if (yych >= '8') goto yy120;
        } else {
            if (yych <= '?') goto yy122;
            if (yych == '\\') goto yy123;
            goto yy120;
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 64) {
        goto yy120;
    }
    if (yych <= '&') goto yy77;
    if (yych <= '\'') goto yy130;
    if (yych <= '[') goto yy122;
    goto yy123;
yy130:
    ++YYCURSOR;
yy131:
#line 437 "idl.re"
    { BOOST_WAVE_RET(T_CHARLIT); }
#line 1898 "idl_re.cpp"
yy132:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy120;
            if (yych <= '\n') goto yy77;
            goto yy120;
        } else {
            if (yych <= '&') {
                if (yych <= 0x1F) goto yy77;
                goto yy120;
            } else {
                if (yych <= '\'') goto yy130;
                if (yych <= '/') goto yy120;
                goto yy132;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy122;
            if (yych <= '@') goto yy120;
            goto yy132;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy120;
                goto yy123;
            } else {
                if (yych <= '`') goto yy120;
                if (yych <= 'f') goto yy132;
                goto yy120;
            }
        }
    }
yy134:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 64) {
        goto yy120;
    }
    if (yych <= '&') goto yy77;
    if (yych <= '\'') goto yy130;
    if (yych >= '\\') goto yy123;
yy135:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '\'') {
        if (yych <= '\n') {
            if (yych == '\t') goto yy120;
            goto yy77;
        } else {
            if (yych <= '\f') goto yy120;
            if (yych <= 0x1F) goto yy77;
            if (yych <= '&') goto yy120;
            goto yy130;
        }
    } else {
        if (yych <= '>') {
            if (yych != '/') goto yy120;
        } else {
            if (yych <= '?') goto yy135;
            if (yych == '\\') goto yy123;
            goto yy120;
        }
    }
yy137:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '>') {
        if (yych <= 0x1F) {
            if (yych <= '\t') {
                if (yych <= 0x08) goto yy77;
                goto yy120;
            } else {
                if (yych <= '\n') goto yy77;
                if (yych <= '\f') goto yy120;
                goto yy77;
            }
        } else {
            if (yych <= '\'') {
                if (yych <= '&') goto yy120;
                goto yy141;
            } else {
                if (yych <= '/') goto yy120;
                if (yych <= '7') goto yy128;
                goto yy120;
            }
        }
    } else {
        if (yych <= '\\') {
            if (yych <= 'T') {
                if (yych <= '?') goto yy142;
                goto yy120;
            } else {
                if (yych <= 'U') goto yy140;
                if (yych <= '[') goto yy120;
                goto yy137;
            }
        } else {
            if (yych <= 'u') {
                if (yych <= 't') goto yy120;
            } else {
                if (yych == 'x') goto yy132;
                goto yy120;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy120;
            if (yych <= '\n') goto yy77;
            goto yy120;
        } else {
            if (yych <= '&') {
                if (yych <= 0x1F) goto yy77;
                goto yy120;
            } else {
                if (yych <= '\'') goto yy130;
                if (yych <= '/') goto yy120;
                goto yy151;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy122;
            if (yych <= '@') goto yy120;
            goto yy151;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy120;
                goto yy123;
            } else {
                if (yych <= '`') goto yy120;
                if (yych <= 'f') goto yy151;
                goto yy120;
            }
        }
    }
yy140:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy120;
            if (yych <= '\n') goto yy77;
            goto yy120;
        } else {
            if (yych <= '&') {
                if (yych <= 0x1F) goto yy77;
                goto yy120;
            } else {
                if (yych <= '\'') goto yy130;
                if (yych <= '/') goto yy120;
                goto yy144;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy122;
            if (yych <= '@') goto yy120;
            goto yy144;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy120;
                goto yy123;
            } else {
                if (yych <= '`') goto yy120;
                if (yych <= 'f') goto yy144;
                goto yy120;
            }
        }
    }
yy141:
    yyaccept = 7;
    YYMARKER = ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 64) {
        goto yy120;
    }
    if (yych <= '&') goto yy131;
    if (yych <= '\'') goto yy130;
    if (yych <= '[') goto yy122;
    goto yy123;
yy142:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 64) {
        goto yy120;
    }
    if (yych <= '&') goto yy77;
    if (yych <= '\'') goto yy130;
    if (yych >= '\\') goto yy123;
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '\'') {
        if (yych <= '\n') {
            if (yych == '\t') goto yy120;
            goto yy77;
        } else {
            if (yych <= '\f') goto yy120;
            if (yych <= 0x1F) goto yy77;
            if (yych <= '&') goto yy120;
            goto yy130;
        }
    } else {
        if (yych <= '>') {
            if (yych == '/') goto yy137;
            goto yy120;
        } else {
            if (yych <= '?') goto yy135;
            if (yych == '\\') goto yy123;
            goto yy120;
        }
    }
yy144:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy120;
            if (yych <= '\n') goto yy77;
            goto yy120;
        } else {
            if (yych <= '&') {
                if (yych <= 0x1F) goto yy77;
                goto yy120;
            } else {
                if (yych <= '\'') goto yy130;
                if (yych <= '/') goto yy120;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy122;
            if (yych <= '@') goto yy120;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy120;
                goto yy123;
            } else {
                if (yych <= '`') goto yy120;
                if (yych >= 'g') goto yy120;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy120;
            if (yych <= '\n') goto yy77;
            goto yy120;
        } else {
            if (yych <= '&') {
                if (yych <= 0x1F) goto yy77;
                goto yy120;
            } else {
                if (yych <= '\'') goto yy130;
                if (yych <= '/') goto yy120;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy122;
            if (yych <= '@') goto yy120;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy120;
                goto yy123;
            } else {
                if (yych <= '`') goto yy120;
                if (yych >= 'g') goto yy120;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy120;
            if (yych <= '\n') goto yy77;
            goto yy120;
        } else {
            if (yych <= '&') {
                if (yych <= 0x1F) goto yy77;
                goto yy120;
            } else {
                if (yych <= '\'') goto yy130;
                if (yych <= '/') goto yy120;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy122;
            if (yych <= '@') goto yy120;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy120;
                goto yy123;
            } else {
                if (yych <= '`') goto yy120;
                if (yych >= 'g') goto yy120;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy120;
            if (yych <= '\n') goto yy77;
            goto yy120;
        } else {
            if (yych <= '&') {
                if (yych <= 0x1F) goto yy77;
                goto yy120;
            } else {
                if (yych <= '\'') goto yy130;
                if (yych <= '/') goto yy120;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy122;
            if (yych <= '@') goto yy120;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy120;
                goto yy123;
            } else {
                if (yych <= '`') goto yy120;
                if (yych >= 'g') goto yy120;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy120;
            if (yych <= '\n') goto yy77;
            goto yy120;
        } else {
            if (yych <= '&') {
                if (yych <= 0x1F) goto yy77;
                goto yy120;
            } else {
                if (yych <= '\'') goto yy130;
                if (yych <= '/') goto yy120;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy122;
            if (yych <= '@') goto yy120;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy120;
                goto yy123;
            } else {
                if (yych <= '`') goto yy120;
                if (yych >= 'g') goto yy120;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy120;
            if (yych <= '\n') goto yy77;
            goto yy120;
        } else {
            if (yych <= '&') {
                if (yych <= 0x1F) goto yy77;
                goto yy120;
            } else {
                if (yych <= '\'') goto yy130;
                if (yych <= '/') goto yy120;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy122;
            if (yych <= '@') goto yy120;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy120;
                goto yy123;
            } else {
                if (yych <= '`') goto yy120;
                if (yych >= 'g') goto yy120;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 64) {
        goto yy120;
    }
    if (yych <= '&') goto yy77;
    if (yych <= '\'') goto yy130;
    if (yych <= '[') goto yy122;
    goto yy123;
yy151:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy120;
            if (yych <= '\n') goto yy77;
            goto yy120;
        } else {
            if (yych <= '&') {
                if (yych <= 0x1F) goto yy77;
                goto yy120;
            } else {
                if (yych <= '\'') goto yy130;
                if (yych <= '/') goto yy120;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy122;
            if (yych <= '@') goto yy120;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy120;
                goto yy123;
            } else {
                if (yych <= '`') goto yy120;
                if (yych >= 'g') goto yy120;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '9') {
        if (yych <= '\f') {
            if (yych == '\t') goto yy120;
            if (yych <= '\n') goto yy77;
            goto yy120;
        } else {
            if (yych <= '&') {
                if (yych <= 0x1F) goto yy77;
                goto yy120;
            } else {
                if (yych <= '\'') goto yy130;
                if (yych <= '/') goto yy120;
            }
        }
    } else {
        if (yych <= 'F') {
            if (yych == '?') goto yy122;
            if (yych <= '@') goto yy120;
        } else {
            if (yych <= '\\') {
                if (yych <= '[') goto yy120;
                goto yy123;
            } else {
                if (yych <= '`') goto yy120;
                if (yych >= 'g') goto yy120;
            }
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 64) {
        goto yy120;
    }
    if (yych <= '&') goto yy77;
    if (yych <= '\'') goto yy130;
    if (yych <= '[') goto yy122;
    goto yy123;
yy154:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy155;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy155:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy156;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy156:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy157;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy157:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy158;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy158:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy159;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy159:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy160;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy160:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy120;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy120;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy120;
        goto yy77;
    }
yy161:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy162;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy162:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy163;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy163:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy120;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy120;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy120;
        goto yy77;
    }
yy164:
    ++YYCURSOR;
#line 434 "idl.re"
    { BOOST_WAVE_RET(T_FIXEDPOINTLIT); }
#line 2522 "idl_re.cpp"
yy166:
    yyaccept = 5;
    YYMARKER = ++YYCURSOR;
    if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
    yych = *YYCURSOR;
    if (yybm[256+yych] & 128) {
        goto yy166;
    }
    if (yych <= 'T') {
        if (yych <= 'D') {
            if (yych == '.') goto yy168;
            if (yych <= 'C') goto yy60;
            goto yy164;
        } else {
            if (yych <= 'E') goto yy171;
            if (yych == 'L') goto yy173;
            goto yy60;
        }
    } else {
        if (yych <= 'e') {
            if (yych <= 'U') goto yy172;
            if (yych <= 'c') goto yy60;
            if (yych <= 'd') goto yy164;
            goto yy171;
        } else {
            if (yych <= 'l') {
                if (yych <= 'k') goto yy60;
                goto yy173;
            } else {
                if (yych == 'u') goto yy172;
                goto yy60;
            }
        }
    }
yy168:
    yyaccept = 8;
    YYMARKER = ++YYCURSOR;
    if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
    yych = *YYCURSOR;
    if (yych <= 'K') {
        if (yych <= 'C') {
            if (yych <= '/') goto yy170;
            if (yych <= '9') goto yy168;
        } else {
            if (yych <= 'D') goto yy164;
            if (yych <= 'E') goto yy181;
            if (yych <= 'F') goto yy178;
        }
    } else {
        if (yych <= 'e') {
            if (yych <= 'L') goto yy179;
            if (yych <= 'c') goto yy170;
            if (yych <= 'd') goto yy164;
            goto yy181;
        } else {
            if (yych <= 'f') goto yy178;
            if (yych == 'l') goto yy179;
        }
    }
yy170:
#line 431 "idl.re"
    { BOOST_WAVE_RET(T_FLOATLIT); }
#line 2585 "idl_re.cpp"
yy171:
    yych = *++YYCURSOR;
    if (yych <= ',') {
        if (yych == '+') goto yy175;
        goto yy77;
    } else {
        if (yych <= '-') goto yy175;
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy176;
        goto yy77;
    }
yy172:
    yych = *++YYCURSOR;
    if (yych == 'L') goto yy174;
    if (yych == 'l') goto yy174;
    goto yy60;
yy173:
    yych = *++YYCURSOR;
    if (yych == 'U') goto yy174;
    if (yych != 'u') goto yy60;
yy174:
    yych = *++YYCURSOR;
    goto yy60;
yy175:
    yych = *++YYCURSOR;
    if (yych <= '/') goto yy77;
    if (yych >= ':') goto yy77;
yy176:
    ++YYCURSOR;
    if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
    yych = *YYCURSOR;
    if (yych <= 'K') {
        if (yych <= '9') {
            if (yych <= '/') goto yy170;
            goto yy176;
        } else {
            if (yych != 'F') goto yy170;
        }
    } else {
        if (yych <= 'f') {
            if (yych <= 'L') goto yy179;
            if (yych <= 'e') goto yy170;
        } else {
            if (yych == 'l') goto yy179;
            goto yy170;
        }
    }
yy178:
    yych = *++YYCURSOR;
    if (yych == 'L') goto yy180;
    if (yych == 'l') goto yy180;
    goto yy170;
yy179:
    yych = *++YYCURSOR;
    if (yych == 'F') goto yy180;
    if (yych != 'f') goto yy170;
yy180:
    yych = *++YYCURSOR;
    goto yy170;
yy181:
    yych = *++YYCURSOR;
    if (yych <= ',') {
        if (yych != '+') goto yy77;
    } else {
        if (yych <= '-') goto yy182;
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy183;
        goto yy77;
    }
yy182:
    yych = *++YYCURSOR;
    if (yych <= '/') goto yy77;
    if (yych >= ':') goto yy77;
yy183:
    ++YYCURSOR;
    if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
    yych = *YYCURSOR;
    if (yych <= 'K') {
        if (yych <= '9') {
            if (yych <= '/') goto yy170;
            goto yy183;
        } else {
            if (yych == 'F') goto yy178;
            goto yy170;
        }
    } else {
        if (yych <= 'f') {
            if (yych <= 'L') goto yy179;
            if (yych <= 'e') goto yy170;
            goto yy178;
        } else {
            if (yych == 'l') goto yy179;
            goto yy170;
        }
    }
yy185:
    yyaccept = 5;
    YYMARKER = ++YYCURSOR;
    if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
    yych = *YYCURSOR;
    if (yybm[0+yych] & 1) {
        goto yy185;
    }
    if (yych <= 'L') {
        if (yych <= '9') {
            if (yych == '.') goto yy168;
            if (yych <= '/') goto yy60;
        } else {
            if (yych <= 'D') {
                if (yych <= 'C') goto yy60;
                goto yy164;
            } else {
                if (yych <= 'E') goto yy171;
                if (yych <= 'K') goto yy60;
                goto yy173;
            }
        }
    } else {
        if (yych <= 'e') {
            if (yych <= 'U') {
                if (yych <= 'T') goto yy60;
                goto yy172;
            } else {
                if (yych <= 'c') goto yy60;
                if (yych <= 'd') goto yy164;
                goto yy171;
            }
        } else {
            if (yych <= 'l') {
                if (yych <= 'k') goto yy60;
                goto yy173;
            } else {
                if (yych == 'u') goto yy172;
                goto yy60;
            }
        }
    }
yy187:
    ++YYCURSOR;
    if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
    yych = *YYCURSOR;
    if (yych <= 'C') {
        if (yych <= '.') {
            if (yych <= '-') goto yy77;
            goto yy168;
        } else {
            if (yych <= '/') goto yy77;
            if (yych <= '9') goto yy187;
            goto yy77;
        }
    } else {
        if (yych <= 'c') {
            if (yych <= 'D') goto yy164;
            if (yych <= 'E') goto yy171;
            goto yy77;
        } else {
            if (yych <= 'd') goto yy164;
            if (yych <= 'e') goto yy171;
            goto yy77;
        }
    }
yy189:
    yych = *++YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy190;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy190:
    ++YYCURSOR;
    if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
    yych = *YYCURSOR;
    if (yych <= 'T') {
        if (yych <= '@') {
            if (yych <= '/') goto yy60;
            if (yych <= '9') goto yy190;
            goto yy60;
        } else {
            if (yych <= 'F') goto yy190;
            if (yych == 'L') goto yy173;
            goto yy60;
        }
    } else {
        if (yych <= 'k') {
            if (yych <= 'U') goto yy172;
            if (yych <= '`') goto yy60;
            if (yych <= 'f') goto yy190;
            goto yy60;
        } else {
            if (yych <= 'l') goto yy173;
            if (yych == 'u') goto yy172;
            goto yy60;
        }
    }
yy192:
    yych = *++YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy218;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy218;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy218;
        goto yy77;
    }
yy193:
    yych = *++YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy194;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy194:
    yych = *++YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy195;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy195:
    yych = *++YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy196;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy196:
    yych = *++YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy197;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy197:
    yych = *++YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy198;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy198:
    yych = *++YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy199;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy199:
    yych = *++YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy200;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy200:
    yych = *++YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy201;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy201:
    yyaccept = 0;
    YYMARKER = ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
yy202:
    if (yybm[0+yych] & 2) {
        goto yy201;
    }
    if (yych == '?') goto yy204;
    if (yych != '\\') goto yy5;
yy203:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych == 'U') goto yy207;
    if (yych == 'u') goto yy206;
    goto yy77;
yy204:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych != '?') goto yy77;
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych == '/') goto yy203;
    goto yy77;
yy206:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy215;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy215;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy215;
        goto yy77;
    }
yy207:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy208;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy208:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy209;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy209:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy210;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy210:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy211;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy211:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy212;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy212:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy213;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy213:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy214;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy214:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy201;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy201;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy201;
        goto yy77;
    }
yy215:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy216;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy216:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy217;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy217:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy201;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy201;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy201;
        goto yy77;
    }
yy218:
    yych = *++YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy219;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy219:
    yych = *++YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych >= ':') goto yy77;
    } else {
        if (yych <= 'F') goto yy220;
        if (yych <= '`') goto yy77;
        if (yych >= 'g') goto yy77;
    }
yy220:
    yych = *++YYCURSOR;
    if (yych <= '@') {
        if (yych <= '/') goto yy77;
        if (yych <= '9') goto yy201;
        goto yy77;
    } else {
        if (yych <= 'F') goto yy201;
        if (yych <= '`') goto yy77;
        if (yych <= 'f') goto yy201;
        goto yy77;
    }
yy221:
    yych = *++YYCURSOR;
    if (yych == '\'') goto yy77;
    goto yy121;
yy222:
    ++YYCURSOR;
#line 417 "idl.re"
    { BOOST_WAVE_RET(T_GREATEREQUAL); }
#line 3093 "idl_re.cpp"
yy224:
    ++YYCURSOR;
#line 413 "idl.re"
    { BOOST_WAVE_RET(T_SHIFTRIGHT); }
#line 3098 "idl_re.cpp"
yy226:
    ++YYCURSOR;
#line 416 "idl.re"
    { BOOST_WAVE_RET(T_LESSEQUAL); }
#line 3103 "idl_re.cpp"
yy228:
    ++YYCURSOR;
#line 412 "idl.re"
    { BOOST_WAVE_RET(T_SHIFTLEFT); }
#line 3108 "idl_re.cpp"
yy230:
    ++YYCURSOR;
#line 414 "idl.re"
    { BOOST_WAVE_RET(T_EQUAL); }
#line 3113 "idl_re.cpp"
yy232:
    ++YYCURSOR;
#line 415 "idl.re"
    { BOOST_WAVE_RET(T_NOTEQUAL); }
#line 3118 "idl_re.cpp"
yy234:
    ++YYCURSOR;
#line 419 "idl.re"
    { BOOST_WAVE_RET(T_OROR); }
#line 3123 "idl_re.cpp"
yy236:
    ++YYCURSOR;
#line 418 "idl.re"
    { BOOST_WAVE_RET(T_ANDAND); }
#line 3128 "idl_re.cpp"
yy238:
    ++YYCURSOR;
    if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
    yych = *YYCURSOR;
yy239:
    if (yybm[0+yych] & 4) {
        goto yy238;
    }
    if (yych <= 'k') {
        if (yych <= 'd') {
            if (yych == '/') goto yy240;
            if (yych <= 'c') goto yy77;
            goto yy243;
        } else {
            if (yych <= 'e') goto yy242;
            if (yych == 'i') goto yy241;
            goto yy77;
        }
    } else {
        if (yych <= 't') {
            if (yych <= 'l') goto yy245;
            if (yych == 'p') goto yy246;
            goto yy77;
        } else {
            if (yych <= 'u') goto yy244;
            if (yych == 'w') goto yy247;
            goto yy77;
        }
    }
yy240:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych == '*') goto yy330;
    goto yy77;
yy241:
    yych = *++YYCURSOR;
    if (yych == 'f') goto yy293;
    if (yych == 'n') goto yy295;
    goto yy77;
yy242:
    yych = *++YYCURSOR;
    if (yych <= 'm') {
        if (yych == 'l') goto yy278;
        goto yy77;
    } else {
        if (yych <= 'n') goto yy277;
        if (yych == 'r') goto yy276;
        goto yy77;
    }
yy243:
    yych = *++YYCURSOR;
    if (yych == 'e') goto yy270;
    goto yy77;
yy244:
    yych = *++YYCURSOR;
    if (yych == 'n') goto yy265;
    goto yy77;
yy245:
    yych = *++YYCURSOR;
    if (yych == 'i') goto yy261;
    goto yy77;
yy246:
    yych = *++YYCURSOR;
    if (yych == 'r') goto yy255;
    goto yy77;
yy247:
    yych = *++YYCURSOR;
    if (yych != 'a') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'r') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'n') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'i') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'n') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'g') goto yy77;
    ++YYCURSOR;
#line 464 "idl.re"
    { BOOST_WAVE_RET(T_PP_WARNING); }
#line 3211 "idl_re.cpp"
yy255:
    yych = *++YYCURSOR;
    if (yych != 'a') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'g') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'm') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'a') goto yy77;
    ++YYCURSOR;
#line 462 "idl.re"
    { BOOST_WAVE_RET(T_PP_PRAGMA); }
#line 3224 "idl_re.cpp"
yy261:
    yych = *++YYCURSOR;
    if (yych != 'n') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'e') goto yy77;
    ++YYCURSOR;
#line 460 "idl.re"
    { BOOST_WAVE_RET(T_PP_LINE); }
#line 3233 "idl_re.cpp"
yy265:
    yych = *++YYCURSOR;
    if (yych != 'd') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'e') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'f') goto yy77;
    ++YYCURSOR;
#line 459 "idl.re"
    { BOOST_WAVE_RET(T_PP_UNDEF); }
#line 3244 "idl_re.cpp"
yy270:
    yych = *++YYCURSOR;
    if (yych != 'f') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'i') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'n') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'e') goto yy77;
    ++YYCURSOR;
#line 458 "idl.re"
    { BOOST_WAVE_RET(T_PP_DEFINE); }
#line 3257 "idl_re.cpp"
yy276:
    yych = *++YYCURSOR;
    if (yych == 'r') goto yy289;
    goto yy77;
yy277:
    yych = *++YYCURSOR;
    if (yych == 'd') goto yy285;
    goto yy77;
yy278:
    yych = *++YYCURSOR;
    if (yych == 'i') goto yy280;
    if (yych != 's') goto yy77;
    yych = *++YYCURSOR;
    if (yych == 'e') goto yy283;
    goto yy77;
yy280:
    yych = *++YYCURSOR;
    if (yych != 'f') goto yy77;
    ++YYCURSOR;
#line 456 "idl.re"
    { BOOST_WAVE_RET(T_PP_ELIF); }
#line 3279 "idl_re.cpp"
yy283:
    ++YYCURSOR;
#line 455 "idl.re"
    { BOOST_WAVE_RET(T_PP_ELSE); }
#line 3284 "idl_re.cpp"
yy285:
    yych = *++YYCURSOR;
    if (yych != 'i') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'f') goto yy77;
    ++YYCURSOR;
#line 457 "idl.re"
    { BOOST_WAVE_RET(T_PP_ENDIF); }
#line 3293 "idl_re.cpp"
yy289:
    yych = *++YYCURSOR;
    if (yych != 'o') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'r') goto yy77;
    ++YYCURSOR;
#line 461 "idl.re"
    { BOOST_WAVE_RET(T_PP_ERROR); }
#line 3302 "idl_re.cpp"
yy293:
    yyaccept = 9;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych == 'd') goto yy321;
    if (yych == 'n') goto yy322;
yy294:
#line 452 "idl.re"
    { BOOST_WAVE_RET(T_PP_IF); }
#line 3311 "idl_re.cpp"
yy295:
    yych = *++YYCURSOR;
    if (yych != 'c') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'l') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'u') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'd') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'e') goto yy77;
yy300:
    yyaccept = 10;
    YYMARKER = ++YYCURSOR;
    if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
    yych = *YYCURSOR;
    if (yych <= '!') {
        if (yych <= '\t') {
            if (yych >= '\t') goto yy300;
        } else {
            if (yych == ' ') goto yy300;
        }
    } else {
        if (yych <= '/') {
            if (yych <= '"') goto yy304;
            if (yych >= '/') goto yy303;
        } else {
            if (yych == '<') goto yy305;
        }
    }
yy302:
#line 450 "idl.re"
    { BOOST_WAVE_RET(T_PP_INCLUDE); }
#line 3345 "idl_re.cpp"
yy303:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych == '*') goto yy314;
    goto yy77;
yy304:
    yych = *++YYCURSOR;
    if (yych == '"') goto yy77;
    goto yy311;
yy305:
    yych = *++YYCURSOR;
    if (yych == '>') goto yy77;
    goto yy307;
yy306:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
yy307:
    if (yybm[0+yych] & 8) {
        goto yy306;
    }
    if (yych <= '=') goto yy77;
    ++YYCURSOR;
#line 444 "idl.re"
    { BOOST_WAVE_RET(T_PP_HHEADER); }
#line 3372 "idl_re.cpp"
yy310:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
yy311:
    if (yybm[0+yych] & 16) {
        goto yy310;
    }
    if (yych <= '!') goto yy77;
    ++YYCURSOR;
#line 447 "idl.re"
    { BOOST_WAVE_RET(T_PP_QHEADER); }
#line 3385 "idl_re.cpp"
yy314:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[0+yych] & 32) {
        goto yy314;
    }
    if (yych == '\r') goto yy316;
    if (yych <= ')') goto yy77;
    goto yy318;
yy316:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[0+yych] & 32) {
        goto yy314;
    }
    if (yych == '\r') goto yy316;
    if (yych <= ')') goto yy77;
yy318:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[0+yych] & 128) {
        goto yy318;
    }
    if (yych <= '\r') {
        if (yych <= 0x08) goto yy77;
        if (yych <= '\f') goto yy314;
    } else {
        if (yych <= 0x1F) goto yy77;
        if (yych == '/') goto yy300;
        goto yy314;
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yybm[0+yych] & 32) {
        goto yy314;
    }
    if (yych == '\r') goto yy316;
    if (yych <= ')') goto yy77;
    goto yy318;
yy321:
    yych = *++YYCURSOR;
    if (yych == 'e') goto yy327;
    goto yy77;
yy322:
    yych = *++YYCURSOR;
    if (yych != 'd') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'e') goto yy77;
    yych = *++YYCURSOR;
    if (yych != 'f') goto yy77;
    ++YYCURSOR;
#line 454 "idl.re"
    { BOOST_WAVE_RET(T_PP_IFNDEF); }
#line 3443 "idl_re.cpp"
yy327:
    yych = *++YYCURSOR;
    if (yych != 'f') goto yy77;
    ++YYCURSOR;
#line 453 "idl.re"
    { BOOST_WAVE_RET(T_PP_IFDEF); }
#line 3450 "idl_re.cpp"
yy330:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '\r') {
        if (yych <= 0x08) goto yy77;
        if (yych <= '\f') goto yy330;
    } else {
        if (yych <= 0x1F) goto yy77;
        if (yych == '*') goto yy334;
        goto yy330;
    }
yy332:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '\r') {
        if (yych <= 0x08) goto yy77;
        if (yych <= '\f') goto yy330;
        goto yy332;
    } else {
        if (yych <= 0x1F) goto yy77;
        if (yych != '*') goto yy330;
    }
yy334:
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= 0x1F) {
        if (yych <= 0x08) goto yy77;
        if (yych <= '\f') goto yy330;
        if (yych >= 0x0E) goto yy77;
    } else {
        if (yych <= '*') {
            if (yych <= ')') goto yy330;
            goto yy334;
        } else {
            if (yych == '/') goto yy238;
            goto yy330;
        }
    }
    ++YYCURSOR;
    if (YYLIMIT <= YYCURSOR) YYFILL(1);
    yych = *YYCURSOR;
    if (yych <= '\r') {
        if (yych <= 0x08) goto yy77;
        if (yych <= '\f') goto yy330;
        goto yy332;
    } else {
        if (yych <= 0x1F) goto yy77;
        if (yych == '*') goto yy334;
        goto yy330;
    }
yy337:
    ++YYCURSOR;
#line 421 "idl.re"
    { BOOST_WAVE_RET(T_MINUSMINUS); }
#line 3508 "idl_re.cpp"
yy339:
    ++YYCURSOR;
#line 420 "idl.re"
    { BOOST_WAVE_RET(T_PLUSPLUS); }
#line 3513 "idl_re.cpp"
yy341:
    yych = *++YYCURSOR;
    if (yych == '/') goto yy342;
    if (yych == '=') goto yy238;
    goto yy77;
yy342:
    yych = *++YYCURSOR;
    if (yych == 'U') goto yy193;
    if (yych == 'u') goto yy192;
    goto yy77;
yy343:
    ++YYCURSOR;
#line 392 "idl.re"
    { BOOST_WAVE_RET(T_POUND_POUND); }
#line 3528 "idl_re.cpp"
yy345:
    yyaccept = 0;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych != 'L') goto yy202;
    yyaccept = 0;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych != 'S') goto yy202;
    yyaccept = 0;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych != 'E') goto yy202;
    yyaccept = 11;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yybm[0+yych] & 2) {
        goto yy201;
    }
    if (yych == '?') goto yy204;
    if (yych == '\\') goto yy203;
yy349:
#line 385 "idl.re"
    { BOOST_WAVE_RET(T_FALSE); }
#line 3549 "idl_re.cpp"
yy350:
    yyaccept = 0;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych != 'U') goto yy202;
    yyaccept = 0;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yych != 'E') goto yy202;
    yyaccept = 12;
    yych = *(YYMARKER = ++YYCURSOR);
    if (yybm[0+yych] & 2) {
        goto yy201;
    }
    if (yych == '?') goto yy204;
    if (yych == '\\') goto yy203;
yy353:
#line 384 "idl.re"
    { BOOST_WAVE_RET(T_TRUE); }
#line 3567 "idl_re.cpp"
yy354:
    ++YYCURSOR;
#line 382 "idl.re"
    { goto cppcomment; }
#line 3572 "idl_re.cpp"
yy356:
    ++YYCURSOR;
#line 381 "idl.re"
    { goto ccomment; }
#line 3577 "idl_re.cpp"
}
#line 495 "idl.re"


ccomment:

#line 3584 "idl_re.cpp"
{
    YYCTYPE yych;
    if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
    yych = *YYCURSOR;
    if (yych <= '\f') {
        if (yych <= 0x08) {
            if (yych <= 0x00) goto yy366;
            goto yy368;
        } else {
            if (yych == '\n') goto yy362;
            goto yy365;
        }
    } else {
        if (yych <= 0x1F) {
            if (yych <= '\r') goto yy364;
            goto yy368;
        } else {
            if (yych != '*') goto yy365;
        }
    }
    ++YYCURSOR;
    if ((yych = *YYCURSOR) == '/') goto yy371;
yy361:
#line 508 "idl.re"
    { goto ccomment; }
#line 3610 "idl_re.cpp"
yy362:
    ++YYCURSOR;
yy363:
#line 501 "idl.re"
    {
        /*if(cursor == s->eof) BOOST_WAVE_RET(T_EOF);*/
        /*s->tok = cursor; */
        s->line += count_backslash_newlines(s, cursor) +1;
        goto ccomment;
    }
#line 3621 "idl_re.cpp"
yy364:
    yych = *++YYCURSOR;
    if (yych == '\n') goto yy370;
    goto yy363;
yy365:
    yych = *++YYCURSOR;
    goto yy361;
yy366:
    ++YYCURSOR;
#line 511 "idl.re"
    {
        using namespace std;      // some systems have printf in std
        if(cursor == s->eof) 
        {
            if (s->error_proc)
                (*s->error_proc)(s, 
                    cpplexer::lexing_exception::generic_lexing_warning,
                    "Unterminated comment");
            else
                printf("Error: Unterminated comment\n");
        }
        else
        {
            if (s->error_proc)
                (*s->error_proc)(s, 
                    cpplexer::lexing_exception::generic_lexing_error,
                    "'\\000' in input stream");
            else
                printf("Error: 0 in file");
        }
        /* adjust cursor such next call returns T_EOF */
        --YYCURSOR;
        /* the comment is unterminated, but nevertheless its a comment */
        BOOST_WAVE_RET(T_CCOMMENT);
    }
#line 3657 "idl_re.cpp"
yy368:
    ++YYCURSOR;
#line 538 "idl.re"
    {
        if (s->error_proc)
            (*s->error_proc)(s, 
                cpplexer::lexing_exception::generic_lexing_error,
                "invalid character in input stream");
        else
            printf("Error: 0 in file");
    }
#line 3669 "idl_re.cpp"
yy370:
    yych = *++YYCURSOR;
    goto yy363;
yy371:
    ++YYCURSOR;
#line 499 "idl.re"
    { BOOST_WAVE_RET(T_CCOMMENT); }
#line 3677 "idl_re.cpp"
}
#line 547 "idl.re"


cppcomment:

#line 3684 "idl_re.cpp"
{
    YYCTYPE yych;
    if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
    yych = *YYCURSOR;
    if (yych <= '\n') {
        if (yych <= 0x00) goto yy381;
        if (yych <= 0x08) goto yy375;
        if (yych <= '\t') goto yy379;
        goto yy376;
    } else {
        if (yych <= '\f') goto yy379;
        if (yych <= '\r') goto yy378;
        if (yych >= ' ') goto yy379;
    }
yy375:
yy376:
    ++YYCURSOR;
yy377:
#line 552 "idl.re"
    {
        /*if(cursor == s->eof) BOOST_WAVE_RET(T_EOF); */
        /*s->tok = cursor; */
        s->line++;
        BOOST_WAVE_RET(T_CPPCOMMENT);
    }
#line 3710 "idl_re.cpp"
yy378:
    yych = *++YYCURSOR;
    if (yych == '\n') goto yy383;
    goto yy377;
yy379:
    ++YYCURSOR;
#line 559 "idl.re"
    { goto cppcomment; }
#line 3719 "idl_re.cpp"
yy381:
    ++YYCURSOR;
#line 562 "idl.re"
    {
        using namespace std;      // some systems have printf in std
        if(cursor != s->eof) 
        {
            if (s->error_proc)
                (*s->error_proc)(s, 
                    cpplexer::lexing_exception::generic_lexing_error,
                    "'\\000' in input stream");
            else
                printf("Error: 0 in file");
        }
        /* adjust cursor such next call returns T_EOF */
        --YYCURSOR;
        /* the comment is unterminated, but nevertheless its a comment */
        BOOST_WAVE_RET(T_CPPCOMMENT);
    }
#line 3739 "idl_re.cpp"
yy383:
    ++YYCURSOR;
    yych = *YYCURSOR;
    goto yy377;
}
#line 578 "idl.re"


} /* end of scan */

#undef RE2C_ASSERT

///////////////////////////////////////////////////////////////////////////////
}   // namespace re2clex
}   // namespace idllexer
}   // namespace wave
}   // namespace boost
