aboutsummaryrefslogtreecommitdiff
path: root/xsd/type-map/lexer.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2009-09-17 07:15:29 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2009-09-17 07:15:29 +0200
commitf0510d2f90467de8e8f260b47d79a9baaf9bef17 (patch)
tree0b9929946f06a9cbe9b9e8f2a7600dae4e048f79 /xsd/type-map/lexer.hxx
Start tracking XSD with git
Diffstat (limited to 'xsd/type-map/lexer.hxx')
-rw-r--r--xsd/type-map/lexer.hxx80
1 files changed, 80 insertions, 0 deletions
diff --git a/xsd/type-map/lexer.hxx b/xsd/type-map/lexer.hxx
new file mode 100644
index 0000000..2969e5d
--- /dev/null
+++ b/xsd/type-map/lexer.hxx
@@ -0,0 +1,80 @@
+// file : xsd/type-map/lexer.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2007-2009 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_TYPE_MAP_LEXER_HXX
+#define XSD_TYPE_MAP_LEXER_HXX
+
+#include <locale>
+#include <iosfwd>
+
+#include <cult/types.hxx>
+
+namespace TypeMap
+{
+ using namespace Cult::Types;
+ typedef WideString String;
+
+ class Lexer
+ {
+ public:
+ class Token
+ {
+ public:
+ enum Type
+ {
+ token,
+ punct,
+ eos
+ };
+
+ Token (Type type, String const& lexeme, UnsignedLong line)
+ : type_ (type), lexeme_ (lexeme), line_ (line)
+ {
+ }
+
+ Type
+ type () const
+ {
+ return type_;
+ }
+
+ String const&
+ lexeme () const
+ {
+ return lexeme_;
+ }
+
+ UnsignedLong
+ line () const
+ {
+ return line_;
+ }
+
+ private:
+ Type type_;
+ String lexeme_;
+ UnsignedLong line_;
+ };
+
+ Lexer (std::istream&, String const& path);
+
+ struct Failed {};
+
+ Token
+ next ();
+
+ private:
+ std::locale locale_;
+ std::istream& is_;
+ String path_;
+ UnsignedLong line_;
+ String held_lexeme_;
+ Boolean comment_;
+ };
+
+}
+
+#endif // XSD_TYPE_MAP_LEXER_HXX
+