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;
|
return scores;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
bool splitOffLeadingLiteral(const NGHolder &g, ue2_literal *lit_out,
|
||||||
bool splitOffLeadingLiteral_i(const NGHolder &g, bool anch,
|
|
||||||
ue2_literal *lit_out,
|
|
||||||
NGHolder *rhs) {
|
NGHolder *rhs) {
|
||||||
NFAVertex u;
|
|
||||||
NFAVertex v;
|
|
||||||
|
|
||||||
if (!anch) {
|
|
||||||
DEBUG_PRINTF("looking for leading floating literal\n");
|
DEBUG_PRINTF("looking for leading floating literal\n");
|
||||||
set<NFAVertex> s_succ;
|
set<NFAVertex> s_succ;
|
||||||
insert(&s_succ, adjacent_vertices(g.start, g));
|
insert(&s_succ, adjacent_vertices(g.start, g));
|
||||||
@ -761,27 +755,8 @@ bool splitOffLeadingLiteral_i(const NGHolder &g, bool anch,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
u = g.startDs;
|
NFAVertex u = g.startDs;
|
||||||
v = *sds_succ.begin();
|
NFAVertex 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();
|
|
||||||
}
|
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
DEBUG_PRINTF("validating vertex %zu\n", g[v].index);
|
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);
|
assert(u != g.startDs);
|
||||||
|
|
||||||
ue2::unordered_map<NFAVertex, NFAVertex> rhs_map;
|
ue2::unordered_map<NFAVertex, NFAVertex> rhs_map;
|
||||||
vector<NFAVertex> pivots;
|
vector<NFAVertex> pivots = make_vector_from(adjacent_vertices(u, g));
|
||||||
insert(&pivots, pivots.end(), adjacent_vertices(u, g));
|
|
||||||
splitRHS(g, pivots, rhs, &rhs_map);
|
splitRHS(g, pivots, rhs, &rhs_map);
|
||||||
|
|
||||||
DEBUG_PRINTF("literal is '%s' (len %zu)\n", dumpString(*lit_out).c_str(),
|
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;
|
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) {
|
bool getTrailingLiteral(const NGHolder &g, ue2_literal *lit_out) {
|
||||||
if (in_degree(g.acceptEod, g) != 1) {
|
if (in_degree(g.acceptEod, g) != 1) {
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user