ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
plcopen_xml_parser.cpp File Reference
#include <ld-frontend/parser/plcopen_xml_parser.h>
#include <pugixml.hpp>
#include <algorithm>
#include <cassert>
#include <cerrno>
#include <cmath>
#include <cctype>
#include <cstdlib>
#include <iostream>
#include <limits>
#include <unordered_map>
#include <unordered_set>
#include <functional>
#include <initializer_list>
#include <map>
#include <optional>
#include <set>
Include dependency graph for plcopen_xml_parser.cpp:

Classes

struct  GNode
struct  pugi_doc_wrapper
struct  VariableUses

Functions

static LdLocation loc_from_node (const pugi::xml_node &n, const std::string &file)
static std::string text_or_attr (const pugi::xml_node &n, const char *attr_name, const char *child_name=nullptr)
static bool negation_from_attribute (const std::string &s)
static ContactEdge contact_edge_from_string (const std::string &s)
static CoilKind coil_kind_of (const std::string &s)
static std::string coil_kind_attribute (const pugi::xml_node &n)
static void note_derived_type (VarDecl &v, bool derived, const std::string &type)
static void require_plain_coil (bool negated, ContactEdge edge, const std::string &var)
template<typename Less>
static void require_total_order (const std::vector< int > &items, Less before)
static void append_synthesized (std::vector< VarDecl > &variables, std::vector< VarDecl > &synthesized)
static FBKind fb_kind_of (const std::string &s)
static void check_known_pins (const pugi::xml_node &block, FBKind kind, const std::string &type_name, const std::string &instance)
static bool literal_to_ticks (const std::string &text, unsigned interval_ms, long long &out)
static void classify_address (VarDecl &v, const std::string &addr)
static std::string formal_var (const pugi::xml_node &block, std::initializer_list< const char * > ports)
static void reject_block_with_power_flow (const RungNode &rung)
static bool steps_every_scan (const std::string &type_name)
static void require_modeled_source (const GNode &g)
static std::vector< int > ids_in_document_order (const std::unordered_map< int, GNode > &nodes)
static const std::string & label (const GNode &g)
static long long parse_duration_ms (const std::string &text)
static long long task_interval_ms (const std::string &text)
static std::optional< FBKind > fb_kind_of_std (const std::string &s)
static const std::unordered_map< FBKind, std::set< std::string > > & known_pins_table ()
static void check_known_pin (FBKind kind, const std::string &type_name, const std::string &instance, const std::string &pin)
static void check_known_pin_if_std (const std::optional< FBKind > &kind, const std::string &type_name, const std::string &instance, const std::string &pin)
static std::string trim (const std::string &text)
static std::vector< FBInWire > input_wires (const pugi::xml_node &blk)
static bool is_identifier (const std::string &text)
static bool is_coil_tag (const std::string &t)
static std::string checked_storage (const std::string &tag, const std::string &storage)
static void reject_execution_order (const pugi::xml_node &n)
static void reject_execution_control (const std::string &t)
static std::string control_pin (const std::unordered_map< int, GNode > &nodes, const std::set< int > &rail_reaches, const GNode &block, const std::string &instance, std::initializer_list< const char * > pins, const std::function< std::string(int)> &power_flow)
static bool parse_graphical_ld (const pugi::xml_node &ld_body, NetworkNode &net, const std::string &source_file, std::vector< VarDecl > &synth_vars, unsigned interval_ms)
static void rename_vendor_tags (pugi::xml_node node)
static std::string wired_variable (const pugi::xml_node &ov)
static const UserFBDef * fb_output_source (const pugi::xml_node &ov, const pugi::xml_node &src, const LdAst &ast)
static std::vector< FBOutWire > out_wires_of (const pugi::xml_node &blk, const LdAst &ast)
static void reject_unmodelled_wires (const pugi::xml_node &root, const LdAst &ast)
static void reject_untranslated_bodies (const pugi::xml_node &root, const LdAst &ast)
static bool shared_section (const pugi::xml_node &vars)
static void reject_concurrent_programs (const pugi::xml_node &root)
static VariableUses collect_uses (const LdAst &ast)
static void infer_io_directions (LdAst &ast)
static void reject_derived_operands (const LdAst &ast)
static void reject_shared_shadow_keys (const LdAst &ast)
static bool plain_pin (const pugi::xml_node &v)
static void check_textual_enable_pins (const pugi::xml_node &blk, const std::string &what)
static void check_graphical_en (const pugi::xml_node &blk, const std::string &what)
static void check_eno_consumers (const pugi::xml_node &blk, const std::string &what)
static void reject_wired_enable_pins (const pugi::xml_node &root)
static void check_declaration (std::set< std::string > &seen, const VarDecl &v)

Function Documentation

◆ append_synthesized()

void append_synthesized ( std::vector< VarDecl > & variables,
std::vector< VarDecl > & synthesized )
static

◆ check_declaration()

void check_declaration ( std::set< std::string > & seen,
const VarDecl & v )
static

◆ check_eno_consumers()

void check_eno_consumers ( const pugi::xml_node & blk,
const std::string & what )
static

◆ check_graphical_en()

void check_graphical_en ( const pugi::xml_node & blk,
const std::string & what )
static

◆ check_known_pin()

void check_known_pin ( FBKind kind,
const std::string & type_name,
const std::string & instance,
const std::string & pin )
static

◆ check_known_pin_if_std()

void check_known_pin_if_std ( const std::optional< FBKind > & kind,
const std::string & type_name,
const std::string & instance,
const std::string & pin )
static

◆ check_known_pins()

void check_known_pins ( const pugi::xml_node & block,
FBKind kind,
const std::string & type_name,
const std::string & instance )
static

◆ check_textual_enable_pins()

void check_textual_enable_pins ( const pugi::xml_node & blk,
const std::string & what )
static

◆ checked_storage()

std::string checked_storage ( const std::string & tag,
const std::string & storage )
static

◆ classify_address()

void classify_address ( VarDecl & v,
const std::string & addr )
static

◆ coil_kind_attribute()

std::string coil_kind_attribute ( const pugi::xml_node & n)
static

◆ coil_kind_of()

CoilKind coil_kind_of ( const std::string & s)
static

◆ collect_uses()

VariableUses collect_uses ( const LdAst & ast)
static

◆ contact_edge_from_string()

ContactEdge contact_edge_from_string ( const std::string & s)
static

◆ control_pin()

std::string control_pin ( const std::unordered_map< int, GNode > & nodes,
const std::set< int > & rail_reaches,
const GNode & block,
const std::string & instance,
std::initializer_list< const char * > pins,
const std::function< std::string(int)> & power_flow )
static

◆ fb_kind_of()

FBKind fb_kind_of ( const std::string & s)
static

◆ fb_kind_of_std()

std::optional< FBKind > fb_kind_of_std ( const std::string & s)
static

◆ fb_output_source()

const UserFBDef * fb_output_source ( const pugi::xml_node & ov,
const pugi::xml_node & src,
const LdAst & ast )
static

◆ formal_var()

std::string formal_var ( const pugi::xml_node & block,
std::initializer_list< const char * > ports )
static

◆ ids_in_document_order()

std::vector< int > ids_in_document_order ( const std::unordered_map< int, GNode > & nodes)
static

◆ infer_io_directions()

void infer_io_directions ( LdAst & ast)
static

◆ input_wires()

std::vector< FBInWire > input_wires ( const pugi::xml_node & blk)
static

◆ is_coil_tag()

bool is_coil_tag ( const std::string & t)
static

◆ is_identifier()

bool is_identifier ( const std::string & text)
static

◆ known_pins_table()

const std::unordered_map< FBKind, std::set< std::string > > & known_pins_table ( )
static

◆ label()

const std::string & label ( const GNode & g)
static

◆ literal_to_ticks()

bool literal_to_ticks ( const std::string & text,
unsigned interval_ms,
long long & out )
static

◆ loc_from_node()

LdLocation loc_from_node ( const pugi::xml_node & n,
const std::string & file )
static

◆ negation_from_attribute()

bool negation_from_attribute ( const std::string & s)
static

◆ note_derived_type()

void note_derived_type ( VarDecl & v,
bool derived,
const std::string & type )
static

◆ out_wires_of()

std::vector< FBOutWire > out_wires_of ( const pugi::xml_node & blk,
const LdAst & ast )
static

◆ parse_duration_ms()

long long parse_duration_ms ( const std::string & text)
static

◆ parse_graphical_ld()

bool parse_graphical_ld ( const pugi::xml_node & ld_body,
NetworkNode & net,
const std::string & source_file,
std::vector< VarDecl > & synth_vars,
unsigned interval_ms )
static

◆ plain_pin()

bool plain_pin ( const pugi::xml_node & v)
static

◆ reject_block_with_power_flow()

void reject_block_with_power_flow ( const RungNode & rung)
static

◆ reject_concurrent_programs()

void reject_concurrent_programs ( const pugi::xml_node & root)
static

◆ reject_derived_operands()

void reject_derived_operands ( const LdAst & ast)
static

◆ reject_execution_control()

void reject_execution_control ( const std::string & t)
static

◆ reject_execution_order()

void reject_execution_order ( const pugi::xml_node & n)
static

◆ reject_shared_shadow_keys()

void reject_shared_shadow_keys ( const LdAst & ast)
static

◆ reject_unmodelled_wires()

void reject_unmodelled_wires ( const pugi::xml_node & root,
const LdAst & ast )
static

◆ reject_untranslated_bodies()

void reject_untranslated_bodies ( const pugi::xml_node & root,
const LdAst & ast )
static

◆ reject_wired_enable_pins()

void reject_wired_enable_pins ( const pugi::xml_node & root)
static

◆ rename_vendor_tags()

void rename_vendor_tags ( pugi::xml_node node)
static

◆ require_modeled_source()

void require_modeled_source ( const GNode & g)
static

◆ require_plain_coil()

void require_plain_coil ( bool negated,
ContactEdge edge,
const std::string & var )
static

◆ require_total_order()

template<typename Less>
void require_total_order ( const std::vector< int > & items,
Less before )
static

◆ shared_section()

bool shared_section ( const pugi::xml_node & vars)
static

◆ steps_every_scan()

bool steps_every_scan ( const std::string & type_name)
static

◆ task_interval_ms()

long long task_interval_ms ( const std::string & text)
static

◆ text_or_attr()

std::string text_or_attr ( const pugi::xml_node & n,
const char * attr_name,
const char * child_name = nullptr )
static

◆ trim()

std::string trim ( const std::string & text)
static

◆ wired_variable()

std::string wired_variable ( const pugi::xml_node & ov)
static