Spicy
driver.h
1 // Copyright (c) 2020-2021 by the Zeek Project. See LICENSE for details.
2 
3 #pragma once
4 
5 #include <utility>
6 #include <vector>
7 #ifdef yylex
8 #undef yylex
9 // Work-around for bison messing up the function name by adding the local namespace.
10 #define yylex lex
11 #endif
12 
13 #include <memory.h>
14 
15 #include <iostream>
16 #include <string>
17 
18 #include <hilti/ast/all.h>
19 #include <hilti/base/result.h>
20 
21 #undef YY_DECL
22 #define YY_DECL \
23  hilti::detail::parser::Parser::token_type \
24  hilti::detail::parser::Scanner::lex(hilti::detail::parser::Parser::semantic_type* yylval, \
25  hilti::detail::parser::location* yylloc, \
26  hilti::detail::parser::Driver* driver)
27 
28 #ifndef __FLEX_LEXER_H
29 #define yyFlexLexer HiltiFlexLexer
30 #include <FlexLexer.h>
31 
32 #undef yyFlexLexer
33 #endif
34 
35 namespace hilti {
36 
37 namespace logging::debug {
38 inline const DebugStream Parser("parser");
39 } // namespace logging::debug
40 
41 namespace detail::parser {
42 
43 class Parser;
44 class Scanner;
45 
47 class Driver {
48 public:
49  Result<hilti::Node> parse(std::istream& in, const std::string& filename);
50 
51  Scanner* scanner() const { return _scanner; }
52  Parser* parser() const { return _parser; }
53 
54  // Methods for the parser.
55 
56  std::string* currentFile() { return &_filename; }
57  void error(const std::string& msg, const Meta& m);
58  void enablePatternMode();
59  void disablePatternMode();
60  void enableExpressionMode();
61  void disableExpressionMode();
62  void enableDottedIDMode();
63  void disableDottedIDMode();
64  void setDestinationModule(Module&& m) { _module = std::move(m); }
65 
66 private:
67  Module _module;
68  std::string _filename;
69  Parser* _parser = nullptr;
70  Scanner* _scanner = nullptr;
71  int _expression_mode = 0;
72 };
73 
74 } // namespace detail::parser
75 } // namespace hilti
Definition: meta.h:19
Definition: scanner.h:17
Definition: module.h:21
Definition: driver.h:47
Definition: result.h:67