aboutsummaryrefslogtreecommitdiff
path: root/build2/test/script/lexer
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-10-12 14:53:32 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-11-04 08:29:23 +0200
commit18ce15f3aee71debe3f35356c6a739943815da8a (patch)
tree828dea05101c11c5b0b6974b25447226db37debf /build2/test/script/lexer
parentf423dbc95239cc88021d5d332ad19eeecc6e11e8 (diff)
Initial work on testscript lexer/parser
Diffstat (limited to 'build2/test/script/lexer')
-rw-r--r--build2/test/script/lexer74
1 files changed, 74 insertions, 0 deletions
diff --git a/build2/test/script/lexer b/build2/test/script/lexer
new file mode 100644
index 0000000..de4c84e
--- /dev/null
+++ b/build2/test/script/lexer
@@ -0,0 +1,74 @@
+// file : build2/test/script/lexer -*- C++ -*-
+// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#ifndef BUILD2_TEST_SCRIPT_LEXER
+#define BUILD2_TEST_SCRIPT_LEXER
+
+#include <build2/types>
+#include <build2/utility>
+
+#include <build2/lexer>
+
+#include <build2/test/script/token>
+
+namespace build2
+{
+ namespace test
+ {
+ namespace script
+ {
+ struct lexer_mode: build2::lexer_mode
+ {
+ using base_type = build2::lexer_mode;
+
+ enum
+ {
+ script_line = base_type::value_next,
+ variable_line,
+ test_line,
+ command_line
+ };
+
+ using base_type::base_type;
+ };
+
+ class lexer: public build2::lexer
+ {
+ public:
+ using base_lexer = build2::lexer;
+ using base_mode = build2::lexer_mode;
+
+ lexer (istream& is, const path& name, lexer_mode m)
+ : base_lexer (is, name, nullptr, nullptr, false) {mode (m);}
+
+ virtual void
+ mode (base_mode, char = '\0') override;
+
+ // Return true if we entered the quoted (double or single) mode since
+ // last reset.
+ //
+ bool
+ quoted () const {return quoted_;}
+
+ void
+ reset_quoted (bool q) {quoted_ = q;}
+
+ protected:
+ virtual token
+ next_impl () override;
+
+ token
+ next_line ();
+
+ token
+ name_line (bool separated);
+
+ protected:
+ bool quoted_ = false;
+ };
+ }
+ }
+}
+
+#endif // BUILD2_TEST_SCRIPT_LEXER