37 if(op.get(ID_statement_list_type) == ID_statement_list_identifier)
38 return op.get(ID_value);
62 if(op.get(ID_statement_list_type) == ID_statement_list_version)
79 root.
id() == ID_statement_list_function,
80 "Expression ID should be statement_list_function");
84 if(op.get(ID_statement_list_type) == ID_statement_list_return)
100 if(op.id() == ID_statement_list_var_decls)
113 const exprt &var_list)
117 std::vector<symbol_exprt> symbols;
119 for(
const exprt &part : entry.operands())
124 symbols.push_back(*symbol);
126 default_value = part;
134 parse_tree_list.push_back(declaration);
145 const exprt &temp_vars)
149 for(
const exprt &part : entry.operands())
156 parse_tree_list.push_back(declaration);
169 const exprt &var_decls)
173 if(decls.id() == ID_statement_list_var_input)
175 else if(decls.id() == ID_statement_list_var_inout)
177 else if(decls.id() == ID_statement_list_var_output)
179 else if(decls.id() == ID_statement_list_var_constant)
181 else if(decls.id() == ID_statement_list_var_temp)
191 const exprt &var_decls)
195 if(ID_statement_list_var_input == decls.id())
197 else if(ID_statement_list_var_inout == decls.id())
199 else if(ID_statement_list_var_output == decls.id())
201 else if(ID_statement_list_var_static == decls.id())
203 else if(ID_statement_list_var_constant == decls.id())
205 else if(ID_statement_list_var_temp == decls.id())
219 if(op.id() == ID_statement_list_networks)
233 if(network_element.get(ID_statement_list_type) == ID_statement_list_title)
234 return network_element.get(ID_value).c_str();
248 if(network_element.id() == ID_statement_list_instructions)
249 return network_element;
259 const exprt &instructions)
267 for(
auto op_it = std::next(instruction_expr.operands().begin());
268 op_it != end(instruction_expr.operands());
271 if(op_it->get(ID_statement_list_type) == ID_label)
273 else if(op_it->is_not_nil())
277 if(label.get_value() == ID_nil)
292 const exprt &network_list)
300 module.add_network(network);
307 block.
id() == ID_statement_list_function_block,
308 "Root expression ID should be ID_statement_list_function_block");
324 function.
id() == ID_statement_list_function,
325 "Expression ID should be statement_list_function");
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
void parse_error(const std::string &message, const std::string &before)
Intermediate representation of a parsed Statement List file before converting it into a goto program.
std::list< var_declarationt > var_declarationst
void clear()
Removes all functions and function blocks from the parse tree.
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 clear() override
Removes all functions and function blocks from the parse tree and clears the internal state of the pa...
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.
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.
auto expr_try_dynamic_cast(TExpr &base) -> typename detail::expr_try_dynamic_cast_return_typet< T, TExpr >::type
Try to cast a reference to a generic exprt to a specific derived class.
std::unordered_set< symbol_exprt, irep_hash > find_variables(const std::vector< exprt > &src)
Returns the set of program variables (as identified by object_address expressions) in the given expre...
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.
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.
statement_list_parsert statement_list_parser
Instance of the parser, used by other modules.
static std::string find_network_title(const exprt &network)
Searches for the title of a network inside of its root expression.
int yystatement_listerror(const std::string &error)
Forwards any errors that are encountered during the parse process.
static exprt find_variable_list(const exprt &root)
Searches for the variable list of the TIA module inside of its root expression.
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.
char * yystatement_listtext
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.
Statement List Language Parser.
int yystatement_listparse()
Defined in statement_list_y.tab.cpp.
const multi_ary_exprt & to_multi_ary_expr(const exprt &expr)
Cast an exprt to a multi_ary_exprt.
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_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.
var_declarationst var_temp
Temp variable declarations.
var_declarationst var_output
Output variable declarations.
Struct for a single variable declaration in Statement List.
optionalt< exprt > default_value
Optional default value of the variable.