[go: up one dir, main page]

File: lexer.hpp

package info (click to toggle)
qonk 0.3.1-3.2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster, forky, sid, trixie
  • size: 2,296 kB
  • sloc: cpp: 14,995; sh: 3,464; makefile: 196
file content (75 lines) | stat: -rw-r--r-- 2,017 bytes parent folder | download | duplicates (3)
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//  $Id: lexer.hpp 848 2006-10-29 02:14:04Z coz $
//
//  TuxKart - a fun racing game with go-kart
//  Copyright (C) 2004 Matthias Braun <matze@braunis.de>
//  code in this file based on lispreader from Mark Probst
//
//  This program is free software; you can redistribute it and/or
//  modify it under the terms of the GNU General Public License
//  as published by the Free Software Foundation; either version 2
//  of the License, or (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program; if not, write to the Free Software
//  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#ifndef __LISPLEXER_H__
#define __LISPLEXER_H__

namespace lisp
{

    class Lexer
    {
    public:
        enum TokenType
        {
            TOKEN_EOF,
            TOKEN_OPEN_PAREN,
            TOKEN_CLOSE_PAREN,
            TOKEN_SYMBOL,
            TOKEN_STRING,
            TOKEN_INTEGER,
            TOKEN_REAL,
            TOKEN_TRUE,
            TOKEN_FALSE
        };

        Lexer(std::istream& stream);
        ~Lexer();

        TokenType getNextToken();

        const char* getString() const
            { return m_token_string; }

        int getLineNumber() const
            { return m_line_number; }

    private:
        enum
        {
            MAX_TOKEN_LENGTH = 4096,
            LEXER_BUFFER_SIZE = 1024
        };

        inline void nextChar();

        std::istream& m_stream;
        bool m_is_eof;
        int m_line_number;
        char m_buffer[LEXER_BUFFER_SIZE+1];
        char* m_buffer_end;
        char* m_c;
        char m_token_string[MAX_TOKEN_LENGTH + 1];
        int m_token_length;
    };

} // end of namespace lisp

#endif