Move regex matching code to zeek namespaces

This commit is contained in:
Tim Wojtulewicz 2020-07-17 15:21:00 -07:00
parent 382812298d
commit c7dc7fc955
26 changed files with 266 additions and 172 deletions

View file

@ -17,30 +17,35 @@ typedef int (*cce_func)(int);
namespace zeek { class String; }
using BroString [[deprecated("Remove in v4.1. Use zeek::String instead.")]] = zeek::String;
class CCL;
class NFA_Machine;
class DFA_Machine;
class Specific_RE_Matcher;
class RE_Matcher;
class DFA_State;
ZEEK_FORWARD_DECLARE_NAMESPACED(NFA_Machine, zeek::detail);
ZEEK_FORWARD_DECLARE_NAMESPACED(DFA_Machine, zeek::detail);
ZEEK_FORWARD_DECLARE_NAMESPACED(DFA_State, zeek::detail);
ZEEK_FORWARD_DECLARE_NAMESPACED(Specific_RE_Matcher, zeek::detail);
ZEEK_FORWARD_DECLARE_NAMESPACED(RE_Matcher, zeek);
ZEEK_FORWARD_DECLARE_NAMESPACED(CCL, zeek::detail);
// This method is automatically generated by flex and shouldn't be namespaced
extern int re_lex(void);
namespace zeek {
namespace detail {
extern int case_insensitive;
extern CCL* curr_ccl;
extern NFA_Machine* nfa;
extern zeek::detail::NFA_Machine* nfa;
extern Specific_RE_Matcher* rem;
extern const char* RE_parse_input;
extern int re_lex(void);
extern int clower(int);
extern void synerr(const char str[]);
typedef int AcceptIdx;
typedef std::set<AcceptIdx> AcceptingSet;
typedef uint64_t MatchPos;
typedef std::map<AcceptIdx, MatchPos> AcceptingMatchSet;
typedef zeek::name_list string_list;
using AcceptIdx = int;
using AcceptingSet = std::set<AcceptIdx>;
using MatchPos = uint64_t;
using AcceptingMatchSet = std::map<AcceptIdx, MatchPos>;
using string_list = zeek::name_list;
typedef enum { MATCH_ANYWHERE, MATCH_EXACTLY, } match_type;
enum match_type { MATCH_ANYWHERE, MATCH_EXACTLY };
// A "specific" RE matcher will match one type of pattern: either
// MATCH_ANYWHERE or MATCH_EXACTLY.
@ -106,7 +111,7 @@ public:
const char* PatternText() const { return pattern_text; }
DFA_Machine* DFA() const { return dfa; }
zeek::detail::DFA_Machine* DFA() const { return dfa; }
void Dump(FILE* f);
@ -133,7 +138,7 @@ protected:
zeek::PList<CCL> ccl_list;
EquivClass equiv_class;
int* ecs;
DFA_Machine* dfa;
zeek::detail::DFA_Machine* dfa;
CCL* any_ccl;
AcceptingSet* accepted;
};
@ -168,14 +173,19 @@ public:
void AddMatches(const AcceptingSet& as, MatchPos position);
protected:
DFA_Machine* dfa;
zeek::detail::DFA_Machine* dfa;
int* ecs;
AcceptingMatchSet accepted_matches;
DFA_State* current_state;
zeek::detail::DFA_State* current_state;
int current_pos;
};
extern RE_Matcher* RE_Matcher_conjunction(const RE_Matcher* re1, const RE_Matcher* re2);
extern RE_Matcher* RE_Matcher_disjunction(const RE_Matcher* re1, const RE_Matcher* re2);
} // namespace detail
class RE_Matcher final {
public:
RE_Matcher();
@ -225,9 +235,30 @@ public:
}
protected:
Specific_RE_Matcher* re_anywhere;
Specific_RE_Matcher* re_exact;
detail::Specific_RE_Matcher* re_anywhere;
detail::Specific_RE_Matcher* re_exact;
};
extern RE_Matcher* RE_Matcher_conjunction(const RE_Matcher* re1, const RE_Matcher* re2);
extern RE_Matcher* RE_Matcher_disjunction(const RE_Matcher* re1, const RE_Matcher* re2);
} // namespace zeek
constexpr auto clower [[deprecated("Remove in v4.1. Use zeek::detail::clower.")]] = zeek::detail::clower;
constexpr auto synerr [[deprecated("Remove in v4.1. Use zeek::detail::synerr.")]] = zeek::detail::synerr;
using AcceptIdx [[deprecated("Remove in v4.1. Use zeek::detail::AcceptIdx.")]] = zeek::detail::AcceptIdx;
using AcceptingSet [[deprecated("Remove in v4.1. Use zeek::detail::AcceptingSet.")]] = zeek::detail::AcceptingSet;
using MatchPos [[deprecated("Remove in v4.1. Use zeek::detail::MatchPos.")]] = zeek::detail::MatchPos;
using AcceptingMatchSet [[deprecated("Remove in v4.1. Use zeek::detail::AcceptingMatchSet.")]] = zeek::detail::AcceptingMatchSet;
using string_list [[deprecated("Remove in v4.1. Use zeek::detail::string_list.")]] = zeek::detail::string_list;
constexpr auto MATCH_ANYWHERE [[deprecated("Remove in v4.1. Use zeek::detail::MATCH_ANYWHERE.")]] = zeek::detail::MATCH_ANYWHERE;
constexpr auto MATCH_EXACTLY [[deprecated("Remove in v4.1. Use zeek::detail::MATCH_EXACTLY.")]] = zeek::detail::MATCH_EXACTLY;
using Specific_RE_Matcher [[deprecated("Remove in v4.1. Use zeek::detail::Specific_RE_Matcher.")]] = zeek::detail::Specific_RE_Matcher;
using RE_Match_State [[deprecated("Remove in v4.1. Use zeek::detail::RE_Match_State.")]] = zeek::detail::RE_Match_State;
using RE_Matcher [[deprecated("Remove in v4.1. Use zeek::RE_Matcher.")]] = zeek::RE_Matcher;
extern int& case_insensitive [[deprecated("Remove in v4.1. Use zeek::detail::case_insensitive")]];
extern zeek::detail::CCL*& curr_ccl [[deprecated("Remove in v4.1. Use zeek::detail::curr_ccl")]];;
extern zeek::detail::NFA_Machine*& nfa [[deprecated("Remove in v4.1. Use zeek::detail::nfa")]];;
extern zeek::detail::Specific_RE_Matcher*& rem [[deprecated("Remove in v4.1. Use zeek::detail::rem")]];;
extern const char*& RE_parse_input [[deprecated("Remove in v4.1. Use zeek::detail::RE_parse_input")]];;