omega_h
Reliable mesh adaptation
Omega_h_parser.hpp
1 #ifndef OMEGA_H_PARSER_HPP
2 #define OMEGA_H_PARSER_HPP
3 
4 #include <stack>
5 #include <stdexcept>
6 
7 #include <Omega_h_grammar.hpp>
8 #include <Omega_h_table.hpp>
9 
10 namespace Omega_h {
11 
12 enum ActionKind {
13  ACTION_NONE,
14  ACTION_SHIFT,
15  ACTION_REDUCE,
16 };
17 
18 struct Action {
19  ActionKind kind;
20  union {
21  int production;
22  int next_state;
23  };
24 };
25 
26 struct Parser {
27  GrammarPtr grammar;
28  /* (state x terminal) -> action */
29  Table<Action> terminal_table;
30  /* (state x non-terminal) -> new state */
31  Table<int> nonterminal_table;
32  Parser() = default;
33  Parser(GrammarPtr g, int nstates_reserve);
34 };
35 
36 int add_state(Parser& p);
37 int get_nstates(Parser const& p);
38 void add_terminal_action(Parser& p, int state, int terminal, Action action);
39 void add_nonterminal_action(
40  Parser& p, int state, int nonterminal, int next_state);
41 Action const& get_action(Parser const& p, int state, int terminal);
42 int execute_action(
43  Parser const& p, std::vector<int>& stack, Action const& action);
44 GrammarPtr const& get_grammar(Parser const& p);
45 
46 class ParserFail : public std::invalid_argument {
47  public:
48  ParserFail(const std::string& msg);
49  virtual void out_of_line_virtual_method();
50 };
51 
52 } // namespace Omega_h
53 
54 #endif
Definition: Omega_h_parser.hpp:46
Definition: amr_mpi_test.cpp:6
Definition: Omega_h_parser.hpp:18
Definition: Omega_h_parser.hpp:26
Definition: Omega_h_table.hpp:10