cprover
cpp_language.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: C++ Language Module
4 
5 Author: Daniel Kroening, kroening@cs.cmu.edu
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_CPP_CPP_LANGUAGE_H
13 #define CPROVER_CPP_CPP_LANGUAGE_H
14 
15 #include <util/language.h>
16 
17 #include "cpp_parse_tree.h"
18 
20 {
21 public:
22  bool preprocess(
23  std::istream &instream,
24  const std::string &path,
25  std::ostream &outstream) override;
26 
27  bool parse(
28  std::istream &instream,
29  const std::string &path) override;
30 
31  bool typecheck(
32  symbol_tablet &symbol_table,
33  const std::string &module) override;
34 
35  bool merge_symbol_table(
36  symbol_tablet &dest,
37  symbol_tablet &src,
38  const std::string &module,
39  class replace_symbolt &replace_symbol) const;
40 
41  bool final(
42  symbol_tablet &symbol_table) override;
43 
44  void show_parse(std::ostream &out) override;
45 
46  // constructor, destructor
47  ~cpp_languaget() override;
49 
50  // conversion from expression into string
51  bool from_expr(
52  const exprt &expr,
53  std::string &code,
54  const namespacet &ns) override;
55 
56  // conversion from type into string
57  bool from_type(
58  const typet &type,
59  std::string &code,
60  const namespacet &ns) override;
61 
62  bool type_to_name(
63  const typet &type,
64  std::string &name,
65  const namespacet &ns) override;
66 
67  // conversion from string into expression
68  bool to_expr(
69  const std::string &code,
70  const std::string &module,
71  exprt &expr,
72  const namespacet &ns) override;
73 
74  languaget *new_language() override
75  { return new cpp_languaget; }
76 
77  std::string id() const override { return "cpp"; }
78  std::string description() const override { return "C++"; }
79  std::set<std::string> extensions() const override;
80 
81  void modules_provided(std::set<std::string> &modules) override;
82 
83 protected:
85  std::string parse_path;
86 
87  void show_parse(std::ostream &out, const cpp_itemt &item);
88 
89  std::string main_symbol()
90  {
91  return "main";
92  }
93 };
94 
96 
97 #endif // CPROVER_CPP_CPP_LANGUAGE_H
The type of an expression.
Definition: type.h:20
bool merge_symbol_table(symbol_tablet &dest, symbol_tablet &src, const std::string &module, class replace_symbolt &replace_symbol) const
C++ Parser.
std::string description() const override
Definition: cpp_language.h:78
languaget * new_language() override
Definition: cpp_language.h:74
~cpp_languaget() override
bool from_type(const typet &type, std::string &code, const namespacet &ns) override
void modules_provided(std::set< std::string > &modules) override
cpp_parse_treet cpp_parse_tree
Definition: cpp_language.h:84
void show_parse(std::ostream &out) override
std::string main_symbol()
Definition: cpp_language.h:89
bool preprocess(std::istream &instream, const std::string &path, std::ostream &outstream) override
ANSI-C preprocessing.
The symbol table.
Definition: symbol_table.h:52
TO_BE_DOCUMENTED.
Definition: namespace.h:62
Abstract interface to support a programming language.
bool from_expr(const exprt &expr, std::string &code, const namespacet &ns) override
bool to_expr(const std::string &code, const std::string &module, exprt &expr, const namespacet &ns) override
bool parse(std::istream &instream, const std::string &path) override
languaget * new_cpp_language()
std::set< std::string > extensions() const override
Base class for all expressions.
Definition: expr.h:46
bool type_to_name(const typet &type, std::string &name, const namespacet &ns) override
std::string id() const override
Definition: cpp_language.h:77
bool typecheck(symbol_tablet &symbol_table, const std::string &module) override
std::string parse_path
Definition: cpp_language.h:85