summaryrefslogtreecommitdiffstats
path: root/src/manifest_parser.h
diff options
context:
space:
mode:
authorThiago Farina <tfarina@chromium.org>2012-07-09 19:09:31 (GMT)
committerThiago Farina <tfarina@chromium.org>2012-07-09 19:09:31 (GMT)
commit3baedf17677e5d8f0c248d950e0681a0f5668992 (patch)
tree026c0c528b04e723d42a98211d29a2e5a3b22f8d /src/manifest_parser.h
parent0ca93baf35d3c2b1e70e008276555b5bec2f9f3e (diff)
downloadNinja-3baedf17677e5d8f0c248d950e0681a0f5668992.zip
Ninja-3baedf17677e5d8f0c248d950e0681a0f5668992.tar.gz
Ninja-3baedf17677e5d8f0c248d950e0681a0f5668992.tar.bz2
Rename parsers.* to manifest_parser.*
So it matches with the class name in there. Signed-off-by: Thiago Farina <tfarina@chromium.org>
Diffstat (limited to 'src/manifest_parser.h')
-rw-r--r--src/manifest_parser.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/manifest_parser.h b/src/manifest_parser.h
new file mode 100644
index 0000000..a2c6c93
--- /dev/null
+++ b/src/manifest_parser.h
@@ -0,0 +1,71 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef NINJA_MANIFEST_PARSER_H_
+#define NINJA_MANIFEST_PARSER_H_
+
+#include <string>
+#include <vector>
+#include <limits>
+
+using namespace std;
+
+#include "lexer.h"
+#include "string_piece.h"
+
+struct BindingEnv;
+struct EvalString;
+struct State;
+
+/// Parses .ninja files.
+struct ManifestParser {
+ struct FileReader {
+ virtual ~FileReader() {}
+ virtual bool ReadFile(const string& path, string* content, string* err) = 0;
+ };
+
+ ManifestParser(State* state, FileReader* file_reader);
+
+ /// Load and parse a file.
+ bool Load(const string& filename, string* err);
+
+ /// Parse a text string of input. Used by tests.
+ bool ParseTest(const string& input, string* err) {
+ return Parse("input", input, err);
+ }
+
+private:
+ /// Parse a file, given its contents as a string.
+ bool Parse(const string& filename, const string& input, string* err);
+
+ /// Parse various statement types.
+ bool ParseRule(string* err);
+ bool ParseLet(string* key, EvalString* val, string* err);
+ bool ParseEdge(string* err);
+ bool ParseDefault(string* err);
+
+ /// Parse either a 'subninja' or 'include' line.
+ bool ParseFileInclude(bool new_scope, string* err);
+
+ /// If the next token is not \a expected, produce an error string
+ /// saying "expectd foo, got bar".
+ bool ExpectToken(Lexer::Token expected, string* err);
+
+ State* state_;
+ BindingEnv* env_;
+ FileReader* file_reader_;
+ Lexer lexer_;
+};
+
+#endif // NINJA_MANIFEST_PARSER_H_