X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Flisp%2Fparser.hpp;h=d4a986e48a9bb2042a73fb5ea753c6729315c16a;hb=5667d7e94d85f968ab914bc457edd689fc907253;hp=fc808b18e2fc5748def49d081257dd4037085600;hpb=a113d3bd1feddd510e3b2852b0d42522735eee40;p=supertux.git diff --git a/src/lisp/parser.hpp b/src/lisp/parser.hpp index fc808b18e..d4a986e48 100644 --- a/src/lisp/parser.hpp +++ b/src/lisp/parser.hpp @@ -22,6 +22,7 @@ #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,16 +41,29 @@ 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