mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
ng_literal_analysis: refactor splitOffLeadingLiteral
This commit is contained in:
parent
7acd8dcac8
commit
d48a11cbbd
@ -734,14 +734,8 @@ vector<u64a> scoreEdges(const NGHolder &g, const flat_set<NFAEdge> &known_bad) {
|
||||
return scores;
|
||||
}
|
||||
|
||||
static
|
||||
bool splitOffLeadingLiteral_i(const NGHolder &g, bool anch,
|
||||
ue2_literal *lit_out,
|
||||
bool splitOffLeadingLiteral(const NGHolder &g, ue2_literal *lit_out,
|
||||
NGHolder *rhs) {
|
||||
NFAVertex u;
|
||||
NFAVertex v;
|
||||
|
||||
if (!anch) {
|
||||
DEBUG_PRINTF("looking for leading floating literal\n");
|
||||
set<NFAVertex> s_succ;
|
||||
insert(&s_succ, adjacent_vertices(g.start, g));
|
||||
@ -761,27 +755,8 @@ bool splitOffLeadingLiteral_i(const NGHolder &g, bool anch,
|
||||
return false;
|
||||
}
|
||||
|
||||
u = g.startDs;
|
||||
v = *sds_succ.begin();
|
||||
} else {
|
||||
DEBUG_PRINTF("looking for leading anchored literal\n");
|
||||
|
||||
if (proper_out_degree(g.startDs, g)) {
|
||||
DEBUG_PRINTF("not anchored\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
set<NFAVertex> s_succ;
|
||||
insert(&s_succ, adjacent_vertices(g.start, g));
|
||||
s_succ.erase(g.startDs);
|
||||
if (s_succ.size() != 1) {
|
||||
DEBUG_PRINTF("branchy root\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
u = g.start;
|
||||
v = *s_succ.begin();
|
||||
}
|
||||
NFAVertex u = g.startDs;
|
||||
NFAVertex v = *sds_succ.begin();
|
||||
|
||||
while (true) {
|
||||
DEBUG_PRINTF("validating vertex %zu\n", g[v].index);
|
||||
@ -838,8 +813,7 @@ bool splitOffLeadingLiteral_i(const NGHolder &g, bool anch,
|
||||
assert(u != g.startDs);
|
||||
|
||||
ue2::unordered_map<NFAVertex, NFAVertex> rhs_map;
|
||||
vector<NFAVertex> pivots;
|
||||
insert(&pivots, pivots.end(), adjacent_vertices(u, g));
|
||||
vector<NFAVertex> pivots = make_vector_from(adjacent_vertices(u, g));
|
||||
splitRHS(g, pivots, rhs, &rhs_map);
|
||||
|
||||
DEBUG_PRINTF("literal is '%s' (len %zu)\n", dumpString(*lit_out).c_str(),
|
||||
@ -848,11 +822,6 @@ bool splitOffLeadingLiteral_i(const NGHolder &g, bool anch,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool splitOffLeadingLiteral(const NGHolder &g, ue2_literal *lit_out,
|
||||
NGHolder *rhs) {
|
||||
return splitOffLeadingLiteral_i(g, false, lit_out, rhs);
|
||||
}
|
||||
|
||||
bool getTrailingLiteral(const NGHolder &g, ue2_literal *lit_out) {
|
||||
if (in_degree(g.acceptEod, g) != 1) {
|
||||
return false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user