40 for(
const CFLEdge*
edge : (*it).second->getOutEdges())
346 return (
it->second.find(src) !=
it->second.end());
352 auto resIns =
indMap[dst].insert(std::make_pair(src, newNode));
354 return resIns.first->second;
const Symbol & getFirstRHSSymbol(const Production &prod) const
const Productions & getProdsFromFirstRHS(const Symbol sym) const
const Symbol & getSecondRHSSymbol(const Production &prod) const
Productions & getEpsilonProds()
const bool hasProdsFromFirstRHS(const Symbol sym) const
const bool hasProdsFromSecondRHS(const Symbol sym) const
const Symbol & getLHSSymbol(const Production &prod) const
const Productions & getProdsFromSecondRHS(const Symbol sym) const
const Productions & getProdsFromSingleRHS(const Symbol sym) const
const bool hasProdsFromSingleRHS(const Symbol sym) const
const CFLEdgeSet & getCFLEdges() const
virtual const CFLEdge * addCFLEdge(CFLNode *src, CFLNode *dst, CFLEdge::GEdgeFlag label)
virtual void solve()
Start solving.
static double numOfChecks
virtual void processCFLEdge(const CFLEdge *Y_edge)
Process CFLEdge.
virtual void initialize()
Initialize worklist.
CFGrammar::Production Production
virtual bool pushIntoWorklist(const CFLEdge *item)
virtual bool isWorklistEmpty()
const CFLEdge * popFromWorklist()
Worklist operations.
iterator begin()
Iterators.
NodeType * getGNode(NodeID id) const
Get a node.
Symbol strToSymbol(const std::string str) const
TreeNode * getNode_h(NodeID src, NodeID dst)
Get the node dst in tree(src)
void insertEdge_h(TreeNode *u, TreeNode *v)
add v into desc(x) as a child of u
virtual void initialize()
Initialize worklist.
void meld(NodeID x, TreeNode *uNode, TreeNode *vNode)
void meld_h(NodeID x, TreeNode *uNode, TreeNode *vNode)
bool hasInd_h(NodeID src, NodeID dst)
void addArc_h(NodeID src, NodeID dst)
void addArc(NodeID src, NodeID dst)
TreeNode * addInd_h(NodeID src, NodeID dst)
Add a node dst to tree(src)
Map< NodeID, std::unordered_map< NodeID, TreeNode * > > indMap
virtual void processCFLEdge(const CFLEdge *Y_edge)
Process CFLEdge.
bool hasEdge(const NodeID src, const NodeID dst, const Label ty)
find src -> find src[ty] -> find dst in set
virtual void processCFLEdge(const CFLEdge *Y_edge)
Process CFLEdge.
NodeBS addEdges(const NodeID src, const NodeBS &dstData, const Label ty)
add edges and return the set of added edges (dst) for src
bool addEdge(const NodeID src, const NodeID dst, const Label ty)
virtual void initialize()
Initialize worklist.
virtual void buildCFLData()
Init CFLData.
llvm::IRBuilder IRBuilder