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 <memory>
16 
17 #include <util/make_unique.h> // unique_ptr
18 
19 #include <langapi/language.h>
20 
21 #include "cpp_parse_tree.h"
22 
24 {
25 public:
26  bool preprocess(
27  std::istream &instream,
28  const std::string &path,
29  std::ostream &outstream) override;
30 
31  bool parse(
32  std::istream &instream,
33  const std::string &path) override;
34 
36  symbol_tablet &symbol_table) override;
37 
38  bool typecheck(
39  symbol_tablet &symbol_table,
40  const std::string &module) override;
41 
42  bool merge_symbol_table(
43  symbol_tablet &dest,
44  symbol_tablet &src,
45  const std::string &module,
46  class replace_symbolt &replace_symbol) const;
47 
48  void show_parse(std::ostream &out) override;
49 
50  // constructor, destructor
51  ~cpp_languaget() override;
53 
54  // conversion from expression into string
55  bool from_expr(
56  const exprt &expr,
57  std::string &code,
58  const namespacet &ns) override;
59 
60  // conversion from type into string
61  bool from_type(
62  const typet &type,
63  std::string &code,
64  const namespacet &ns) override;
65 
66  bool type_to_name(
67  const typet &type,
68  std::string &name,
69  const namespacet &ns) override;
70 
71  // conversion from string into expression
72  bool to_expr(
73  const std::string &code,
74  const std::string &module,
75  exprt &expr,
76  const namespacet &ns) override;
77 
78  std::unique_ptr<languaget> new_language() override
79  { return util_make_unique<cpp_languaget>(); }
80 
81  std::string id() const override { return "cpp"; }
82  std::string description() const override { return "C++"; }
83  std::set<std::string> extensions() const override;
84 
85  void modules_provided(std::set<std::string> &modules) override;
86 
87 protected:
89  std::string parse_path;
90 
91  void show_parse(std::ostream &out, const cpp_itemt &item);
92 
93  std::string main_symbol()
94  {
95  return "main";
96  }
97 };
98 
99 std::unique_ptr<languaget> new_cpp_language();
100 
101 #endif // CPROVER_CPP_CPP_LANGUAGE_H
The type of an expression.
Definition: type.h:22
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:82
~cpp_languaget() override
bool from_type(const typet &type, std::string &code, const namespacet &ns) override
Formats the given type in a language-specific way.
void modules_provided(std::set< std::string > &modules) override
cpp_parse_treet cpp_parse_tree
Definition: cpp_language.h:88
void show_parse(std::ostream &out) override
std::string main_symbol()
Definition: cpp_language.h:93
bool preprocess(std::istream &instream, const std::string &path, std::ostream &outstream) override
ANSI-C preprocessing.
The symbol table.
Definition: symbol_table.h:19
TO_BE_DOCUMENTED.
Definition: namespace.h:74
Abstract interface to support a programming language.
bool from_expr(const exprt &expr, std::string &code, const namespacet &ns) override
Formats the given expression in a language-specific way.
bool to_expr(const std::string &code, const std::string &module, exprt &expr, const namespacet &ns) override
Parses the given string into an expression.
bool parse(std::istream &instream, const std::string &path) override
std::unique_ptr< languaget > new_cpp_language()
std::set< std::string > extensions() const override
std::unique_ptr< languaget > new_language() override
Definition: cpp_language.h:78
Base class for all expressions.
Definition: expr.h:42
bool type_to_name(const typet &type, std::string &name, const namespacet &ns) override
Encodes the given type in a language-specific way.
std::string id() const override
Definition: cpp_language.h:81
bool typecheck(symbol_tablet &symbol_table, const std::string &module) override
std::string parse_path
Definition: cpp_language.h:89
bool generate_support_functions(symbol_tablet &symbol_table) override
Create language-specific support functions, such as __CPROVER_start, __CPROVER_initialize and languag...