summaryrefslogtreecommitdiff
path: root/parse/preproc.cpp
blob: fa051a3ec8dd3e2d9b7675d5c1900fb18ed404d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "preproc.hpp"
#include <iostream>

Preproc::Preproc(::std::string path):
    m_lex(path),
    m_cache_valid(false)
{
    //ctor
}

Preproc::~Preproc()
{
    //dtor
}

Token Preproc::getTokenInt()
{
    while(true)
    {
        Token tok = m_lex.getToken();
        ::std::cout << "getTokenInt: tok = " << tok << ::std::endl;
        switch(tok.type())
        {
        case TOK_WHITESPACE:
            continue;
        case TOK_COMMENT:
            continue;
        default:
            return tok;
        }
    }
}

Token Preproc::getToken()
{
    if( m_cache_valid )
    {
        m_cache_valid = false;
        return m_cache;
    }
    else
    {
        return this->getTokenInt();
    }
}
void Preproc::putback(Token tok)
{
    m_cache_valid = true;
    m_cache = tok;
}