P4C
The P4 Compiler
 
Loading...
Searching...
No Matches
graphs::Graph_visitor Class Reference
Inheritance diagram for graphs::Graph_visitor:

Public Member Functions

 Graph_visitor (const cstring &graphsDir, const bool graphs, const bool fullGraph, const bool jsonOut, const cstring &filename)
 
const char * getPrevType (const PrevType &prev_type)
 Maps PrevType to string.
 
const char * getType (const VertexType &v_type)
 Maps VertexType to string.
 
void process (std::vector< Graph * > &controlGraphsArray, std::vector< Graph * > &parserGraphsArray)
 main function
 
void writeGraphToFile (const Graph &g, const cstring &name)
 Writes boost graph "g" in dot format to file given by "name".
 
- Public Member Functions inherited from graphs::Graphs
vertex_t add_and_connect_vertex (const cstring &name, VertexType type)
 
void add_edge (const vertex_t &from, const vertex_t &to, const cstring &name)
 
void add_edge (const vertex_t &from, const vertex_t &to, const cstring &name, unsigned cluster_id)
 used to connect subgraphs
 
vertex_t add_vertex (const cstring &name, VertexType type)
 
std::optional< vertex_t > merge_other_statements_into_vertex ()
 

Additional Inherited Members

- Public Types inherited from graphs::Graphs
using edgeProperties
 
using Graph = boost::subgraph<Graph_>
 
using Graph_
 
using graphProperties
 
using GraphvizAttributes = std::map<cstring, cstring>
 
using Parents = std::vector<std::pair<vertex_t, EdgeTypeIface *>>
 
using vertex_t = boost::graph_traits<Graph>::vertex_descriptor
 
using vertexProperties = boost::property<boost::vertex_attribute_t, GraphvizAttributes, Vertex>
 
enum class  VertexType {
  TABLE , KEY , ACTION , CONDITION ,
  SWITCH , STATEMENTS , CONTROL , OTHER ,
  STATE , EMPTY
}
 
- Protected Attributes inherited from graphs::Graphs
vertex_t exit_v {}
 
Graph * g {nullptr}
 
Parents parents {}
 
vertex_t start_v {}
 
std::vector< const IR::Statement * > statementsStack {}
 

Detailed Description

"process" function of class is dependent on previous aplication of visitor classes Controls and Parsers onto IR, and can only be run after them

Constructor & Destructor Documentation

◆ Graph_visitor()

graphs::Graph_visitor::Graph_visitor ( const cstring & graphsDir,
const bool graphs,
const bool fullGraph,
const bool jsonOut,
const cstring & filename )
inline
Parameters
graphsDirdirectory where graphs will be stored
graphsoption to output graph for each function block
fullGraphoption to create fullGraph
jsonOutoption to create json fullGraph

Member Function Documentation

◆ getPrevType()

const char * graphs::Graph_visitor::getPrevType ( const PrevType & prev_type)

Maps PrevType to string.

Parameters
prev_typePrevType to map
Returns
string representation of prev_type

◆ getType()

const char * graphs::Graph_visitor::getType ( const VertexType & v_type)

Maps VertexType to string.

Parameters
v_typeVertexType to map
Returns
string representation of v_type

◆ process()

void graphs::Graph_visitor::process ( std::vector< Graph * > & controlGraphsArray,
std::vector< Graph * > & parserGraphsArray )

main function

based on the value of boolean class variables "graphs", "fullGraph", "jsonOut" executes: "graphs" - outputs boost graphs to files "fullGraph" - merges boost graphs into one CFG, and outputs to file "jsonOut" - iterates over boost graphs, and creates json representation of these graphs

Parameters
controlGraphsArrayvector with boost graphs of control blocks
parserGraphsArrayvector with boost graphs of control parsers

◆ writeGraphToFile()

void graphs::Graph_visitor::writeGraphToFile ( const Graph & g,
const cstring & name )

Writes boost graph "g" in dot format to file given by "name".

Parameters
gboost graph
namefile name