35 if(op.get(ID_statement_list_type) == ID_statement_list_identifier)
36 return op.get(ID_value);
60 if(op.get(ID_statement_list_type) == ID_statement_list_version)
77 root.
id() == ID_statement_list_function,
78 "Expression ID should be statement_list_function");
82 if(op.get(ID_statement_list_type) == ID_statement_list_return)
98 if(op.id() == ID_statement_list_var_decls)
111 const exprt &var_list)
115 std::vector<symbol_exprt> symbols;
120 expr_try_dynamic_cast<symbol_exprt>(part);
122 symbols.push_back(*symbol);
124 default_value = part;
132 parse_tree_list.push_back(declaration);
143 const exprt &temp_vars)
150 expr_try_dynamic_cast<symbol_exprt>(part);
154 parse_tree_list.push_back(declaration);
167 const exprt &var_decls)
171 if(decls.id() == ID_statement_list_var_input)
173 else if(decls.id() == ID_statement_list_var_inout)
175 else if(decls.id() == ID_statement_list_var_output)
177 else if(decls.id() == ID_statement_list_var_constant)
179 else if(decls.id() == ID_statement_list_var_temp)
189 const exprt &var_decls)
193 if(ID_statement_list_var_input == decls.id())
195 else if(ID_statement_list_var_inout == decls.id())
197 else if(ID_statement_list_var_output == decls.id())
199 else if(ID_statement_list_var_static == decls.id())
201 else if(ID_statement_list_var_constant == decls.id())
203 else if(ID_statement_list_var_temp == decls.id())
217 if(op.id() == ID_statement_list_networks)
231 if(network_element.get(ID_statement_list_type) == ID_statement_list_title)
232 return network_element.get(ID_value).c_str();
246 if(network_element.id() == ID_statement_list_instructions)
247 return network_element;
257 const exprt &instructions)
265 for(
auto op_it = std::next(instruction_expr.operands().begin());
266 op_it != end(instruction_expr.operands());
269 if(op_it->get(ID_statement_list_type) == ID_label)
271 else if(op_it->is_not_nil())
275 if(label.value() == ID_nil)
290 const exprt &network_list)
305 block.
id() == ID_statement_list_function_block,
306 "Root expression ID should be ID_statement_list_function_block");
322 function.
id() == ID_statement_list_function,
323 "Expression ID should be statement_list_function");
347 #ifdef STATEMENT_LIST_DEBUG
static abstract_object_pointert transform(const exprt &expr, const std::vector< abstract_object_pointert > &operands, const abstract_environmentt &environment, const namespacet &ns)
codet representation of a label for branch targets.
Data structure for representing an arbitrary statement in a program.
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Base class for all expressions.
std::vector< exprt > operandst
void add_to_operands(const exprt &expr)
Add the given argument to the end of exprt's operands.
const irep_idt & id() const
Intermediate representation of a parsed Statement List file before converting it into a goto program.
std::list< var_declarationt > var_declarationst
void add_function_block(function_blockt &block)
Adds a function block to the parse tree.
std::vector< symbol_exprt > tags
List of tags that were included in the source.
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.
Responsible for starting the parse process and to translate the result into a statement_list_parse_tr...
statement_list_parse_treet parse_tree
Tree that is being filled by the parsing process.
void add_tag_list(const exprt &tag_list)
Adds a tag list to the parse tree by converting the tag_list expression tree.
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.
void add_function(const exprt &function)
Adds a function to the parse tree by converting the function expression tree.
void swap_tree(statement_list_parse_treet &other)
Swaps the contents of the parse tree of this instance with other.
static int instance_count
bool parse() override
Starts the parsing process and saves the result inside of this instance's parse tree.
Expression to hold a symbol (variable)
The type of an expression, extends irept.
const std::string & id2string(const irep_idt &d)
#define UNREACHABLE
This should be used to mark dead code.
#define INVARIANT(CONDITION, REASON)
This macro uses the wrapper function 'invariant_violated_string'.
Statement List Language Parse Tree.
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.
Statement List Language Parse Tree Output.
static void find_variables(statement_list_parse_treet::functiont &function, const exprt &var_decls)
Adds all valid variable declarations to the given function.
static std::string find_version(const exprt &root)
Searches for the version of the TIA module inside of its root expression.
void yystatement_listset_debug(int, void *)
static exprt find_network_instructions(const exprt &network)
Searches for the instruction list of a network inside of its root expression.
static void find_instructions(statement_list_parse_treet::networkt &network, const exprt &instructions)
Adds all valid instructions to the given network.
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.
static exprt find_network_list(const exprt &root)
Searches for the network list of the TIA element 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.
int yystatement_listlex_init_extra(statement_list_parsert *, void **)
static exprt find_variable_list(const exprt &root)
Searches for the variable list of the TIA module inside of its root expression.
int yystatement_listparse(statement_list_parsert &, void *)
Defined in statement_list_y.tab.cpp.
static irep_idt find_name(const exprt &root)
Searches for the name of the TIA module 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...
static typet find_return_value(const exprt &root)
Searches for the return type of a function inside of its root expression.
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.
int yystatement_listlex_destroy(void *)
Statement List Language Parser.
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
const multi_ary_exprt & to_multi_ary_expr(const exprt &expr)
Cast an exprt to a multi_ary_exprt.
const string_constantt & to_string_constant(const exprt &expr)
Structure for a simple function block in Statement List.
var_declarationst var_static
FB-exclusive static variable declarations.
Structure for a simple function in Statement List.
Represents a regular Statement List instruction which consists out of one or more codet tokens.
void add_token(const codet &token)
Adds a codet element to the list of all tokens.
Representation of a network in Siemens TIA.
void add_instruction(const instructiont &inst)
Adds an instruction to the network.
Base element of all modules in the Totally Integrated Automation (TIA) portal by Siemens.
var_declarationst var_constant
Constant variable declarations.
var_declarationst var_input
Input variable declarations.
var_declarationst var_inout
Inout variable declarations.
void add_network(networkt &network)
Adds a network to the function.
var_declarationst var_temp
Temp variable declarations.
var_declarationst var_output
Output variable declarations.
Struct for a single variable declaration in Statement List.
std::optional< exprt > default_value
Optional default value of the variable.