diff options
author | Thiago Farina <tfarina@chromium.org> | 2012-07-09 19:09:31 (GMT) |
---|---|---|
committer | Thiago Farina <tfarina@chromium.org> | 2012-07-09 19:09:31 (GMT) |
commit | 3baedf17677e5d8f0c248d950e0681a0f5668992 (patch) | |
tree | 026c0c528b04e723d42a98211d29a2e5a3b22f8d /src/manifest_parser.h | |
parent | 0ca93baf35d3c2b1e70e008276555b5bec2f9f3e (diff) | |
download | Ninja-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.h | 71 |
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_ |