summaryrefslogtreecommitdiff
path: root/src/core/parser/Parser.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/parser/Parser.hpp')
-rw-r--r--src/core/parser/Parser.hpp101
1 files changed, 29 insertions, 72 deletions
diff --git a/src/core/parser/Parser.hpp b/src/core/parser/Parser.hpp
index 049ee4e..e4419f5 100644
--- a/src/core/parser/Parser.hpp
+++ b/src/core/parser/Parser.hpp
@@ -32,94 +32,52 @@
#include <set>
#include <string>
-#include <core/Registry.hpp>
-#include <core/common/CharReader.hpp>
-#include <core/common/Exceptions.hpp>
-#include <core/common/Logger.hpp>
+#include <core/managed/Managed.hpp>
#include <core/model/Node.hpp>
-#include <core/model/Project.hpp>
-
-#include "Scope.hpp"
namespace ousia {
-namespace parser {
-// TODO: Implement a proper Mimetype class
+// Forward declarations
+class CharReader;
+class ParserContext;
/**
- * Struct containing the objects that are passed to a parser instance.
+ * Abstract parser class. This class builds the basic interface that should be
+ * used by any parser which reads data from an input stream and transforms it
+ * into an Ousía node graph.
*/
-struct ParserContext {
- /**
- * Reference to the Scope instance that should be used within the parser.
- */
- Scope &scope;
-
- /**
- * Reference to the Registry instance that should be used within the parser.
- */
- Registry &registry;
-
- /**
- * Reference to the Logger the parser should log any messages to.
- */
- Logger &logger;
-
+class Parser {
+protected:
/**
- * Reference to the Manager the parser should append nodes to.
+ * Parses the given input stream and returns a corresponding node for
+ * inclusion in the document graph. This method should be overridden by
+ * derived classes.
+ *
+ * @param reader is a reference to the CharReader that should be used.
+ * @param ctx is a reference to the context that should be used while
+ * parsing the document.
+ * @return a reference to the node representing the subgraph that has been
+ * created. The resulting node may point at not yet resolved entities, the
+ * calling code will try to resolve these. If no valid node can be produced,
+ * a corresponding LoggableException must be thrown by the parser.
*/
- Manager &manager;
+ virtual Rooted<Node> doParse(CharReader &reader, ParserContext &ctx) = 0;
+public:
/**
- * Project instance into which the new content should be parsed.
+ * Default constructor.
*/
- Rooted<model::Project> project;
+ Parser() {}
/**
- * Constructor of the ParserContext class.
- *
- * @param scope is a reference to the Scope instance that should be used to
- * lookup names.
- * @param registry is a reference at the Registry class, which allows to
- * obtain references at parsers for other formats or script engine
- * implementations.
- * @param logger is a reference to the Logger instance that should be used
- * to log error messages and warnings that occur while parsing the document.
- * @param manager is a Reference to the Manager the parser should append
- * nodes to.
- * @param project is the project into which the content should be parsed.
+ * No copy construction.
*/
- ParserContext(Scope &scope, Registry &registry, Logger &logger,
- Manager &manager, Handle<model::Project> project)
- : scope(scope),
- registry(registry),
- logger(logger),
- manager(manager),
- project(project){};
-};
-
-/**
- * Abstract parser class. This class builds the basic interface that should be
- * used by any parser which reads data from an input stream and transforms it
- * into an Ousía node graph.
- */
-class Parser {
-public:
- Parser(){};
Parser(const Parser &) = delete;
/**
- * Returns a set containing all mime types supported by the parser. The mime
- * types are used to describe the type of the document that is read by the
- * parser. The default implementation returns an empty set. This method
- * should be overridden by derived classes.
- *
- * @return a set containing the string value of the supported mime types.
+ * Virtual destructor.
*/
- virtual std::set<std::string> mimetypes()
- {
- return std::set<std::string>{};
- };
+ virtual ~Parser(){};
/**
* Parses the given input stream and returns a corresponding node for
@@ -132,9 +90,9 @@ public:
* @return a reference to the node representing the subgraph that has been
* created. The resulting node may point at not yet resolved entities, the
* calling code will try to resolve these. If no valid node can be produced,
- * a corresponding LoggableException must be thrown by the parser.
+ * a corresponding ParserException must be thrown by the parser.
*/
- virtual Rooted<Node> parse(CharReader &reader, ParserContext &ctx) = 0;
+ Rooted<Node> parse(CharReader &reader, ParserContext &ctx);
/**
* Parses the given string and returns a corresponding node for
@@ -152,7 +110,6 @@ public:
Rooted<Node> parse(const std::string &str, ParserContext &ctx);
};
}
-}
#endif /* _OUSIA_PARSER_HPP_ */