Exemple #1
0
        public void lex_init()
        {
            if (inited)
            {
                return;
            }

            keywords = PtrBuffer.Create();

            assign_token_to_binary_token[(int)TOKEN_ADD_ASSIGN]    = TOKEN_ADD;
            assign_token_to_binary_token[(int)TOKEN_SUB_ASSIGN]    = TOKEN_SUB;
            assign_token_to_binary_token[(int)TOKEN_OR_ASSIGN]     = TOKEN_OR;
            assign_token_to_binary_token[(int)TOKEN_AND_ASSIGN]    = TOKEN_AND;
            assign_token_to_binary_token[(int)TOKEN_XOR_ASSIGN]    = TOKEN_XOR;
            assign_token_to_binary_token[(int)TOKEN_LSHIFT_ASSIGN] = TOKEN_LSHIFT;
            assign_token_to_binary_token[(int)TOKEN_RSHIFT_ASSIGN] = TOKEN_RSHIFT;
            assign_token_to_binary_token[(int)TOKEN_MUL_ASSIGN]    = TOKEN_MUL;
            assign_token_to_binary_token[(int)TOKEN_DIV_ASSIGN]    = TOKEN_DIV;
            assign_token_to_binary_token[(int)TOKEN_MOD_ASSIGN]    = TOKEN_MOD;

            init_tokens();
            init_keywords();

            char_to_digit['0'] = 0;
            char_to_digit['1'] = 1;
            char_to_digit['2'] = 2;
            char_to_digit['3'] = 3;
            char_to_digit['4'] = 4;
            char_to_digit['5'] = 5;
            char_to_digit['6'] = 6;
            char_to_digit['7'] = 7;
            char_to_digit['8'] = 8;
            char_to_digit['9'] = 9;
            char_to_digit['a'] = 10;
            char_to_digit['b'] = 11;
            char_to_digit['c'] = 12;
            char_to_digit['d'] = 13;
            char_to_digit['e'] = 14;
            char_to_digit['f'] = 15;
            char_to_digit['A'] = 10;
            char_to_digit['B'] = 11;
            char_to_digit['C'] = 12;
            char_to_digit['D'] = 13;
            char_to_digit['E'] = 14;
            char_to_digit['F'] = 15;

            escape_to_char['n']  = '\n';
            escape_to_char['r']  = '\r';
            escape_to_char['t']  = '\t';
            escape_to_char['v']  = '\v';
            escape_to_char['b']  = '\b';
            escape_to_char['a']  = '\a';
            escape_to_char['0']  = '\0';
            escape_to_char['\\'] = '\\';
            escape_to_char['\''] = '\'';
            escape_to_char['\"'] = '\"';
        }
Exemple #2
0
        Typespec *parse_type_tuple()
        {
            SrcPos     pos    = token.pos;
            PtrBuffer *fields = PtrBuffer.Create();

            while (!is_token(TOKEN_RBRACE))
            {
                Typespec *field = parse_type();
                fields->Add(field);
                if (!match_token(TOKEN_COMMA))
                {
                    break;
                }
            }
            expect_token(TOKEN_RBRACE);
            return(new_typespec_tuple(pos, (Typespec **)fields->_begin, fields->count));
        }