Kea  2.3.2-git
dhcp6/parser_context.h
Go to the documentation of this file.
1 // Copyright (C) 2015-2021 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #ifndef PARSER_CONTEXT_H
8 #define PARSER_CONTEXT_H
9 #include <string>
10 #include <map>
11 #include <vector>
12 #include <dhcp6/dhcp6_parser.h>
14 #include <exceptions/exceptions.h>
15 
16 // Tell Flex the lexer's prototype ...
17 #define YY_DECL isc::dhcp::Dhcp6Parser::symbol_type parser6_lex (Parser6Context& driver)
18 
19 // ... and declare it for the parser's sake.
21 
22 namespace isc {
23 namespace dhcp {
24 
29 public:
30  Dhcp6ParseError(const char* file, size_t line, const char* what) :
31  isc::Exception(file, line, what) { };
32 };
33 
36 {
37 public:
38 
49  typedef enum {
52 
56 
62 
65 
68 
71 
74 
77 
80 
83 
86 
89 
92 
95  } ParserType;
96 
99 
101  virtual ~Parser6Context();
102 
104  std::vector<isc::data::ElementPtr> stack_;
105 
110  void scanStringBegin(const std::string& str, ParserType type);
111 
117  void scanFileBegin(FILE* f, const std::string& filename, ParserType type);
118 
120  void scanEnd();
121 
125  void includeFile(const std::string& filename);
126 
137  isc::data::ElementPtr parseString(const std::string& str,
138  ParserType parser_type);
139 
150  isc::data::ElementPtr parseFile(const std::string& filename,
151  ParserType parser_type);
152 
162  void error(const isc::dhcp::location& loc,
163  const std::string& what,
164  size_t pos = 0);
165 
173  void error(const std::string& what);
174 
182  static void fatal(const std::string& what);
183 
191  isc::data::Element::Position loc2pos(isc::dhcp::location& loc);
192 
202  void require(const std::string& name,
204  isc::data::Element::Position close_loc);
205 
214  void unique(const std::string& name,
216 
223  void warning(const isc::dhcp::location& loc, const std::string& what);
224 
230  void warnAboutExtraCommas(const isc::dhcp::location& loc);
231 
233  typedef enum {
235  NO_KEYWORD,
236 
238  CONFIG,
239 
242 
245 
248 
251 
254 
257 
260 
263 
266 
269 
272 
275 
278 
281 
286 
289 
292 
295 
298 
301 
304 
307 
310 
313 
316 
319 
322 
325 
328 
331 
334 
337 
340 
343 
346 
347  } ParserContext;
348 
350  std::string file_;
351 
353  std::vector<std::string> files_;
354 
359  isc::dhcp::location loc_;
360 
362  std::vector<isc::dhcp::location> locs_;
363 
365  std::vector<struct yy_buffer_state*> states_;
366 
368  FILE* sfile_;
369 
375  std::vector<FILE*> sfiles_;
376 
378  ParserContext ctx_;
379 
392  void enter(const ParserContext& ctx);
393 
397  void leave();
398 
402  const std::string contextName();
403 
404  private:
406  bool trace_scanning_;
407 
409  bool trace_parsing_;
410 
412  std::vector<ParserContext> cstack_;
413 
417  isc::data::ElementPtr parseCommon();
418 };
419 
420 }; // end of isc::eval namespace
421 }; // end of isc namespace
422 
423 #endif
Used while parsing Dhcp6/lease-database structures.
ParserContext ctx_
Current syntactic context.
Used while parsing Dhcp6/option-def structures.
Define the isc::dhcp::parser class.
Used while parsing config-control/config-databases.
This will parse the input as hooks-library.
Used while parsing Dhcp6/client-classes structures.
Used while parsing Dhcp6/dhcp-queue-control structures.
This will parse the input as option definition.
Used while parsing Dhcp6/reservations structures.
Used while parsing Dhcp6/config-control.
This will parse the input as option data.
boost::shared_ptr< Element > ElementPtr
Definition: data.h:24
Evaluation context, an interface to the expression evaluation.
Used while parsing Dhcp6/dhcp-ddns/ncr-protocol.
std::vector< std::string > files_
File name stack.
Used while parsing Dhcp6/dhcp-ddns/ncr-format.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
std::vector< isc::data::ElementPtr > stack_
JSON elements being parsed.
Used while parsing Dhcp6/*-database/on-fail.
Used while parsing Dhcp6/server-id/type structures.
Used while parsing Dhcp6/expired-leases-processing.
Used while parsing Dhcp6/mac-sources structures.
Evaluation error exception raised when trying to parse.
Used while parsing Dhcp6/loggers/output_options structures.
This parser will parse the content as generic JSON.
Dhcp6ParseError(const char *file, size_t line, const char *what)
ParserType
Defines currently supported scopes.
FILE * sfile_
sFile (aka FILE)
Used while parsing Dhcp6/*-database/type.
This will parse the input as pool6 content.
Used while parsing Dhcp6/subnet6/pd-pools structures.
Used while parsing Dhcp6/option-data, Dhcp6/subnet6/option-data or anywhere option-data is present (c...
This will parse the input option definitions (for tests).
isc::dhcp::location loc_
Location of the current token.
Used while parsing Dhcp6/hosts-database[s] structures.
Used while parsing Dhcp6/loggers structures.
std::vector< FILE * > sfiles_
sFile (aka FILE) stack
This will parse the input as Subnet6 content.
This parser will parse the content as Dhcp6 config wrapped in a map (that&#39;s the regular config file) ...
Represents the position of the data element within a configuration string.
Definition: data.h:92
This will parse the input as interfaces content.
This is a base class for exceptions thrown from the DNS library module.
Defines the logger used by the top-level component of kea-lfc.
Used while parsing Dhcp6/interfaces structures.
This will parse the input as dhcp-ddns. (D2 client config)
ParserContext
Defines syntactic contexts for lexical tie-ins.
Used while parsing shared-networks structures.
Used while parsing Dhcp6/dhcp-ddns/replace-client-name.
This parser will parse the content of Dhcp6 (without outer { } and without "Dhcp6").
This will parse the input as host-reservation.
Used while parsing Dhcp6/control-socket structures.
Used while parsing Dhcp6/host-reservation-identifiers.
Forward declaration of the ParserContext class.
This will parse the input as config-control.
std::string file_
File name.
std::vector< isc::dhcp::location > locs_
Location stack.
Used while parsing compatibility parameters.
Used while parsing Dhcp6/subnet6/relay structures.
Used while parsing Dhcp6/multi-threading structures.
Used while parsing Dhcp6/subnet6/pools structures.
This will parse the input as pd-pool content.
Used while parsing Dhcp6/reservation-mode.
Used while parsing Dhcp6/hooks-libraries.
#define YY_DECL
Used while parsing Dhcp6/Subnet6 structures.
Used while parsing Dhcp6/dhcp-ddns.
Used while parsing Dhcp6/server-id structures.
std::vector< struct yy_buffer_state * > states_
Lexer state stack.