Go to the documentation of this file.
34 if(op.get(ID_statement_list_type) == ID_statement_list_identifier)
35 return op.get(ID_value);
59 if(op.get(ID_statement_list_type) == ID_statement_list_version)
76 root.
id() == ID_statement_list_function,
77 "Expression ID should be statement_list_function");
81 if(op.get(ID_statement_list_type) == ID_statement_list_return)
97 if(op.id() == ID_statement_list_var_decls)
110 const exprt &var_list)
114 std::vector<symbol_exprt> symbols;
119 expr_try_dynamic_cast<symbol_exprt>(part);
121 symbols.push_back(*symbol);
123 default_value = part;
131 parse_tree_list.push_back(declaration);
142 const exprt &temp_vars)
149 expr_try_dynamic_cast<symbol_exprt>(part);
153 parse_tree_list.push_back(declaration);
166 const exprt &var_decls)
170 if(decls.id() == ID_statement_list_var_input)
172 else if(decls.id() == ID_statement_list_var_inout)
174 else if(decls.id() == ID_statement_list_var_output)
176 else if(decls.id() == ID_statement_list_var_constant)
178 else if(decls.id() == ID_statement_list_var_temp)
188 const exprt &var_decls)
192 if(ID_statement_list_var_input == decls.id())
194 else if(ID_statement_list_var_inout == decls.id())
196 else if(ID_statement_list_var_output == decls.id())
198 else if(ID_statement_list_var_static == decls.id())
200 else if(ID_statement_list_var_constant == decls.id())
202 else if(ID_statement_list_var_temp == decls.id())
216 if(op.id() == ID_statement_list_networks)
230 if(network_element.get(ID_statement_list_type) == ID_statement_list_title)
231 return network_element.get(ID_value).c_str();
245 if(network_element.id() == ID_statement_list_instructions)
246 return network_element;
256 const exprt &instructions)
264 for(
auto op_it = std::next(instruction_expr.operands().begin());
265 op_it != end(instruction_expr.operands());
268 if(op_it->get(ID_statement_list_type) == ID_label)
270 else if(op_it->is_not_nil())
274 if(label.get_value() == ID_nil)
289 const exprt &network_list)
304 block.
id() == ID_statement_list_function_block,
305 "Root expression ID should be ID_statement_list_function_block");
321 function.
id() == ID_statement_list_function,
322 "Expression ID should be statement_list_function");
#define UNREACHABLE
This should be used to mark dead code.
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
optionalt< exprt > default_value
Optional default value of the variable.
void add_function_block(const exprt &block)
Adds a function block to the parse tree by converting the block expression tree.
void print_tree(std::ostream &out) const
Prints the parse tree of this instance to the given output stream.
std::list< var_declarationt > var_declarationst
statement_list_parsert statement_list_parser
Instance of the parser, used by other modules.
The type of an expression, extends irept.
static abstract_object_pointert transform(const exprt &expr, const std::vector< abstract_object_pointert > &operands, const abstract_environmentt &environment, const namespacet &ns)
var_declarationst var_temp
Temp variable declarations.
bool parse() override
Starts the parsing process and saves the result inside of this instance's parse tree.
static std::string find_version(const exprt &root)
Searches for the version of the TIA module inside of its root expression.
static std::string find_network_title(const exprt &network)
Searches for the title of a network inside of its root expression.
const string_constantt & to_string_constant(const exprt &expr)
Struct for a single variable declaration in Statement List.
var_declarationst var_input
Input variable declarations.
char * yystatement_listtext
Base class for all expressions.
Represents a regular Statement List instruction which consists out of one or more codet tokens.
Base element of all modules in the Totally Integrated Automation (TIA) portal by Siemens.
static void fill_vars_with_default_values(statement_list_parse_treet::var_declarationst &parse_tree_list, const exprt &var_list)
Adds all variable declarations (which can have a default value) to the given list.
static void find_instructions(statement_list_parse_treet::networkt &network, const exprt &instructions)
Adds all valid instructions to the given network.
Expression to hold a symbol (variable)
Structure for a simple function block in Statement List.
void output_parse_tree(std::ostream &out, const statement_list_parse_treet &parse_tree)
Prints the given Statement List parse tree in a human-readable form to the given output stream.
void add_network(networkt &network)
Adds a network to the function.
void add_tag_list(const exprt &tag_list)
Adds a tag list to the parse tree by converting the tag_list expression tree.
void swap_tree(statement_list_parse_treet &other)
Swaps the contents of the parse tree of this instance with other.
var_declarationst var_constant
Constant variable declarations.
static exprt find_network_instructions(const exprt &network)
Searches for the instruction list of a network inside of its root expression.
statement_list_parse_treet parse_tree
Tree that is being filled by the parsing process.
void add_function(functiont &function)
Adds a function to the parse tree.
void swap(statement_list_parse_treet &other)
Swaps the contents of the parse tree with the parameter.
const std::string & id2string(const irep_idt &d)
codet representation of a label for branch targets.
static exprt find_network_list(const exprt &root)
Searches for the network list of the TIA element inside of its root expression.
static void fill_temp_vars(statement_list_parse_treet::var_declarationst &parse_tree_list, const exprt &temp_vars)
Adds all temp variable declarations (variable declarations which can't have a default value) to the g...
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
const irep_idt & id() const
std::vector< exprt > operandst
int yystatement_listparse()
Defined in statement_list_y.tab.cpp.
void parse_error(const std::string &message, const std::string &before)
var_declarationst var_static
FB-exclusive static variable declarations.
void clear() override
Removes all functions and function blocks from the parse tree and clears the internal state of the pa...
Intermediate representation of a parsed Statement List file before converting it into a goto program.
void clear()
Removes all functions and function blocks from the parse tree.
static irep_idt find_name(const exprt &root)
Searches for the name of the TIA module inside of its root expression.
void add_token(const codet &token)
Adds a codet element to the list of all tokens.
std::vector< symbol_exprt > tags
List of tags that were included in the source.
void add_function(const exprt &function)
Adds a function to the parse tree by converting the function expression tree.
static void find_networks(statement_list_parse_treet::tia_modulet &module, const exprt &network_list)
Adds all valid networks and their instructions to the given function element.
void add_instruction(const instructiont &inst)
Adds an instruction to the network.
void add_to_operands(const exprt &expr)
Add the given argument to the end of exprt's operands.
static typet find_return_value(const exprt &root)
Searches for the return type of a function inside of its root expression.
#define INVARIANT(CONDITION, REASON)
This macro uses the wrapper function 'invariant_violated_string'.
var_declarationst var_inout
Inout variable declarations.
int yystatement_listerror(const std::string &error)
Forwards any errors that are encountered during the parse process.
Structure for a simple function in Statement List.
var_declarationst var_output
Output variable declarations.
const multi_ary_exprt & to_multi_ary_expr(const exprt &expr)
Cast an exprt to a multi_ary_exprt.
static exprt find_variable_list(const exprt &root)
Searches for the variable list of the TIA module inside of its root expression.
Responsible for starting the parse process and to translate the result into a statement_list_parse_tr...
Representation of a network in Siemens TIA.
void add_function_block(function_blockt &block)
Adds a function block to the parse tree.
static void find_variables(statement_list_parse_treet::functiont &function, const exprt &var_decls)
Adds all valid variable declarations to the given function.
Data structure for representing an arbitrary statement in a program.