00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef HEADER_SUPERTUX_LISP_PARSER_HPP
00018 #define HEADER_SUPERTUX_LISP_PARSER_HPP
00019
00020 #include <obstack.h>
00021
00022 #include "lisp/lexer.hpp"
00023
00024 namespace tinygettext {
00025 class Dictionary;
00026 class DictionaryManager;
00027 }
00028
00029 namespace lisp {
00030
00031 class Lisp;
00032 class LispFile;
00033
00034 class Parser
00035 {
00036 public:
00037 Parser(bool translate = true);
00038 ~Parser();
00039
00045 const Lisp* parse(const std::string& filename);
00050 const Lisp* parse(std::istream& stream, const std::string& sourcename);
00051
00052 private:
00053 void parse_error(const char* msg) const __attribute__((__noreturn__));
00054 const Lisp* read();
00055
00056
00057 private:
00058 Lexer* lexer;
00059 std::string filename;
00060 tinygettext::DictionaryManager* dictionary_manager;
00061 tinygettext::Dictionary* dictionary;
00062 Lexer::TokenType token;
00063
00064 struct obstack obst;
00065
00066 private:
00067 Parser(const Parser&);
00068 Parser & operator=(const Parser&);
00069 };
00070
00071 }
00072
00073 #endif
00074
00075