mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
ng_expr_info: more complete analysis passes
This commit is contained in:
parent
c4e2459318
commit
9aee3b22b5
13
src/hs.cpp
13
src/hs.cpp
@ -39,10 +39,8 @@
|
||||
#include "compiler/error.h"
|
||||
#include "nfagraph/ng.h"
|
||||
#include "nfagraph/ng_expr_info.h"
|
||||
#include "nfagraph/ng_extparam.h"
|
||||
#include "nfagraph/ng_fuzzy.h"
|
||||
#include "parser/parse_error.h"
|
||||
#include "parser/Parser.h"
|
||||
#include "parser/parse_error.h"
|
||||
#include "parser/prefilter.h"
|
||||
#include "parser/unsupported.h"
|
||||
#include "util/compile_error.h"
|
||||
@ -394,14 +392,7 @@ hs_error_t hs_expression_info_int(const char *expression, unsigned int flags,
|
||||
throw ParseError("Internal error.");
|
||||
}
|
||||
|
||||
// validate graph's suitability for fuzzing
|
||||
validate_fuzzy_compile(*g, expr.edit_distance, expr.utf8, cc.grey);
|
||||
|
||||
// fuzz graph - this must happen before any transformations are made
|
||||
make_fuzzy(*g, expr.edit_distance, cc.grey);
|
||||
|
||||
propagateExtendedParams(*g, expr, rm);
|
||||
fillExpressionInfo(rm, *g, expr, &local_info);
|
||||
fillExpressionInfo(rm, cc, *g, expr, &local_info);
|
||||
}
|
||||
catch (const CompileError &e) {
|
||||
// Compiler error occurred
|
||||
|
@ -37,10 +37,14 @@
|
||||
#include "ng_asserts.h"
|
||||
#include "ng_depth.h"
|
||||
#include "ng_edge_redundancy.h"
|
||||
#include "ng_extparam.h"
|
||||
#include "ng_fuzzy.h"
|
||||
#include "ng_holder.h"
|
||||
#include "ng_prune.h"
|
||||
#include "ng_reports.h"
|
||||
#include "ng_util.h"
|
||||
#include "ue2common.h"
|
||||
#include "compiler/expression_info.h"
|
||||
#include "parser/position.h" // for POS flags
|
||||
#include "util/boundary_reports.h"
|
||||
#include "util/compile_context.h"
|
||||
@ -135,15 +139,48 @@ bool hasOffsetAdjust(const ReportManager &rm, const NGHolder &g) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void fillExpressionInfo(ReportManager &rm, NGHolder &g,
|
||||
const ExpressionInfo &expr, hs_expr_info *info) {
|
||||
void fillExpressionInfo(ReportManager &rm, const CompileContext &cc,
|
||||
NGHolder &g, ExpressionInfo &expr,
|
||||
hs_expr_info *info) {
|
||||
assert(info);
|
||||
|
||||
// remove reports that aren't on vertices connected to accept.
|
||||
clearReports(g);
|
||||
|
||||
assert(allMatchStatesHaveReports(g));
|
||||
|
||||
/*
|
||||
* Note: the following set of analysis passes / transformations should
|
||||
* match those in NG::addGraph().
|
||||
*/
|
||||
|
||||
/* ensure utf8 starts at cp boundary */
|
||||
ensureCodePointStart(rm, g, expr);
|
||||
|
||||
if (can_never_match(g)) {
|
||||
throw CompileError(expr.index, "Pattern can never match.");
|
||||
}
|
||||
|
||||
// validate graph's suitability for fuzzing
|
||||
validate_fuzzy_compile(g, expr.edit_distance, expr.utf8, cc.grey);
|
||||
|
||||
resolveAsserts(rm, g, expr);
|
||||
assert(allMatchStatesHaveReports(g));
|
||||
|
||||
// fuzz graph - this must happen before any transformations are made
|
||||
make_fuzzy(g, expr.edit_distance, cc.grey);
|
||||
|
||||
pruneUseless(g);
|
||||
pruneEmptyVertices(g);
|
||||
|
||||
if (can_never_match(g)) {
|
||||
throw CompileError(expr.index, "Pattern can never match.");
|
||||
}
|
||||
|
||||
optimiseVirtualStarts(g);
|
||||
|
||||
propagateExtendedParams(g, expr, rm);
|
||||
|
||||
removeLeadingVirtualVerticesFromRoot(g, g.start);
|
||||
removeLeadingVirtualVerticesFromRoot(g, g.startDs);
|
||||
|
||||
|
@ -41,9 +41,10 @@ namespace ue2 {
|
||||
class ExpressionInfo;
|
||||
class NGHolder;
|
||||
class ReportManager;
|
||||
struct CompileContext;
|
||||
|
||||
void fillExpressionInfo(ReportManager &rm, NGHolder &g,
|
||||
const ExpressionInfo &expr, hs_expr_info *info);
|
||||
void fillExpressionInfo(ReportManager &rm, const CompileContext &cc,
|
||||
NGHolder &g, ExpressionInfo &expr, hs_expr_info *info);
|
||||
|
||||
} // namespace ue2
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user