CBMC
jsil_parse_tree.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Jsil Language
4 
5 Author: Michael Tautschnig, tautschn@amazon.com
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_JSIL_JSIL_PARSE_TREE_H
13 #define CPROVER_JSIL_JSIL_PARSE_TREE_H
14 
15 #include <iosfwd>
16 #include <list>
17 
18 #include <util/std_code.h>
19 
20 class symbolt;
21 
23 {
24 public:
25  jsil_declarationt():exprt(ID_declaration)
26  {
27  }
28 
29  void add_declarator(const symbol_exprt &expr)
30  {
31  add(ID_declarator, expr);
32  }
33 
34  const symbol_exprt &declarator() const
35  {
36  return static_cast<const symbol_exprt &>(find(ID_declarator));
37  }
38 
40  {
41  return static_cast<symbol_exprt &>(add(ID_declarator));
42  }
43 
45  const irep_idt &value,
46  const irep_idt &label)
47  {
48  add(ID_return).set(ID_value, value);
49  add(ID_return).set(ID_label, label);
50  }
51 
52  const irep_idt &returns_value() const
53  {
54  return find(ID_return).get(ID_value);
55  }
56 
57  const irep_idt &returns_label() const
58  {
59  return find(ID_return).get(ID_label);
60  }
61 
62  void add_throws(
63  const irep_idt &value,
64  const irep_idt &label)
65  {
66  add(ID_throw).set(ID_value, value);
67  add(ID_throw).set(ID_label, label);
68  }
69 
70  const irep_idt &throws_value() const
71  {
72  return find(ID_throw).get(ID_value);
73  }
74 
75  const irep_idt &throws_label() const
76  {
77  return find(ID_throw).get(ID_label);
78  }
79 
80  void add_value(const code_blockt &code)
81  {
82  add(ID_value, code);
83  }
84 
85  const code_blockt &value() const
86  {
87  return static_cast<const code_blockt &>(find(ID_value));
88  }
89 
91  {
92  return static_cast<code_blockt &>(add(ID_value));
93  }
94 
95  void to_symbol(symbolt &symbol) const;
96 
97  void output(std::ostream &) const;
98 };
99 
101 {
102 public:
103  typedef std::list<jsil_declarationt> itemst;
105 
106  void swap(jsil_parse_treet &other)
107  {
108  items.swap(other.items);
109  }
110 
111  void clear()
112  {
113  items.clear();
114  }
115 
116  void output(std::ostream &out) const;
117 };
118 
119 #endif // CPROVER_JSIL_JSIL_PARSE_TREE_H
jsil_parse_treet::items
itemst items
Definition: jsil_parse_tree.h:104
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:36
jsil_declarationt
Definition: jsil_parse_tree.h:22
code_blockt
A codet representing sequential composition of program statements.
Definition: std_code.h:129
jsil_declarationt::throws_label
const irep_idt & throws_label() const
Definition: jsil_parse_tree.h:75
jsil_declarationt::declarator
const symbol_exprt & declarator() const
Definition: jsil_parse_tree.h:34
irept::find
const irept & find(const irep_idt &name) const
Definition: irep.cpp:106
jsil_parse_treet::itemst
std::list< jsil_declarationt > itemst
Definition: jsil_parse_tree.h:103
jsil_declarationt::returns_label
const irep_idt & returns_label() const
Definition: jsil_parse_tree.h:57
jsil_declarationt::throws_value
const irep_idt & throws_value() const
Definition: jsil_parse_tree.h:70
exprt
Base class for all expressions.
Definition: expr.h:55
jsil_declarationt::returns_value
const irep_idt & returns_value() const
Definition: jsil_parse_tree.h:52
jsil_declarationt::add_throws
void add_throws(const irep_idt &value, const irep_idt &label)
Definition: jsil_parse_tree.h:62
symbol_exprt
Expression to hold a symbol (variable)
Definition: std_expr.h:112
irept::get
const irep_idt & get(const irep_idt &name) const
Definition: irep.cpp:45
jsil_declarationt::add_returns
void add_returns(const irep_idt &value, const irep_idt &label)
Definition: jsil_parse_tree.h:44
jsil_parse_treet::output
void output(std::ostream &out) const
Definition: jsil_parse_tree.cpp:92
jsil_parse_treet
Definition: jsil_parse_tree.h:100
irept::set
void set(const irep_idt &name, const irep_idt &value)
Definition: irep.h:420
jsil_parse_treet::swap
void swap(jsil_parse_treet &other)
Definition: jsil_parse_tree.h:106
jsil_declarationt::to_symbol
void to_symbol(symbolt &symbol) const
Definition: jsil_parse_tree.cpp:43
jsil_declarationt::output
void output(std::ostream &) const
Definition: jsil_parse_tree.cpp:84
std_code.h
jsil_declarationt::add_value
void add_value(const code_blockt &code)
Definition: jsil_parse_tree.h:80
irept::add
irept & add(const irep_idt &name)
Definition: irep.cpp:116
jsil_parse_treet::clear
void clear()
Definition: jsil_parse_tree.h:111
symbolt
Symbol table entry.
Definition: symbol.h:27
jsil_declarationt::jsil_declarationt
jsil_declarationt()
Definition: jsil_parse_tree.h:25
jsil_declarationt::declarator
symbol_exprt & declarator()
Definition: jsil_parse_tree.h:39
jsil_declarationt::add_declarator
void add_declarator(const symbol_exprt &expr)
Definition: jsil_parse_tree.h:29
jsil_declarationt::value
code_blockt & value()
Definition: jsil_parse_tree.h:90
jsil_declarationt::value
const code_blockt & value() const
Definition: jsil_parse_tree.h:85