summaryrefslogtreecommitdiff
path: root/src/parse/tokentree.hpp
blob: b1b353eacb698f76ac3de92a44a4932fe9715b80 (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
#ifndef TOKENTREE_HPP_INCLUDED
#define TOKENTREE_HPP_INCLUDED

#include "lex.hpp"


class TokenTree
{
    Token   m_tok;
    ::std::vector<TokenTree>    m_subtrees;
public:
    TokenTree() {}
    TokenTree(Token tok):
        m_tok(tok)
    {
    }
    TokenTree(::std::vector<TokenTree> subtrees):
        m_subtrees(subtrees)
    {
    }

    const unsigned int size() const {
        return m_subtrees.size();
    }
    const TokenTree& operator[](unsigned int idx) const {
        return m_subtrees[idx];
    }
    const Token& tok() const {
        return m_tok;
    }
};

class TTStream:
    public TokenStream
{
    const TokenTree&    m_input_tt;
    ::std::vector< ::std::pair<unsigned int, const TokenTree*> > m_stack;
public:
    TTStream(const TokenTree& input_tt);
    ~TTStream();

protected:
    virtual Token realGetToken();
};

extern TokenTree Parse_TT(TokenStream& lex);
extern TokenTree Parse_TT_Expr(TokenStream& lex);
extern TokenTree Parse_TT_Stmt(TokenStream& lex);

#endif // TOKENTREE_HPP_INCLUDED