X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Flisp%2Fparser.hpp;h=d4a986e48a9bb2042a73fb5ea753c6729315c16a;hb=38ea8c3ead1a5b679621363b01dfd54c7b42cf75;hp=ad77911626a3d5164ff67b0058acc4167cc9bdaf;hpb=5b7f9214cb929399f1a855ef5807018a9447d510;p=supertux.git diff --git a/src/lisp/parser.hpp b/src/lisp/parser.hpp index ad7791162..d4a986e48 100644 --- a/src/lisp/parser.hpp +++ b/src/lisp/parser.hpp @@ -1,8 +1,7 @@ // $Id$ // -// TuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Matthias Braun -// code in this file based on lispreader from Mark Probst +// SuperTux +// Copyright (C) 2006 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -17,11 +16,13 @@ // 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 __LISPPARSER_H__ #define __LISPPARSER_H__ #include #include "lexer.hpp" +#include "obstack/obstack.h" namespace TinyGetText { class Dictionary; @@ -32,6 +33,7 @@ namespace lisp { class Lisp; +class LispFile; class Parser { @@ -39,19 +41,31 @@ public: Parser(bool translate = true); ~Parser(); - Lisp* parse(const std::string& filename); - Lisp* parse(std::istream& stream); + /** + * Parses a lispfile and returns the s-expression structure. + * Note that all memory is held by the parser so don't destroy the parser + * before you are finished with the lisp tree + */ + const Lisp* parse(const std::string& filename); + /** + * Same as parse but reads from a generic std::istream. The sourcename is + * used for errormessages to indicate the source of the data. + */ + const Lisp* parse(std::istream& stream, const std::string& sourcename); private: - Lisp* read(); - + void parse_error(const char* msg) const; + const Lisp* read(); + Lexer* lexer; + std::string filename; TinyGetText::DictionaryManager* dictionary_manager; TinyGetText::Dictionary* dictionary; Lexer::TokenType token; + + struct obstack obst; }; } // end of namespace lisp #endif -