VR-Vantage 3.0.3 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
internal::GenericRegex< Encoding, Allocator > Class Template Reference

Regular expression engine with subset of ECMAscript grammar. More...

Classes

class  DecodedStream
struct  Frag
struct  Range
struct  State

Public Types

typedef Encoding::Ch Ch

Public Member Functions

 GenericRegex (const Ch *source, Allocator *allocator=0)
 ~GenericRegex ()
bool IsValid () const
template<typename InputStream >
bool Match (InputStream &is) const
bool Match (const Ch *s) const
template<typename InputStream >
bool Search (InputStream &is) const
bool Search (const Ch *s) const

Private Types

enum  Operator {
  kZeroOrOne, kZeroOrMore, kOneOrMore, kConcatenation,
  kAlternation, kLeftParenthesis
}

Private Member Functions

StateGetState (SizeType index)
const StateGetState (SizeType index) const
RangeGetRange (SizeType index)
const RangeGetRange (SizeType index) const
template<typename InputStream >
void Parse (DecodedStream< InputStream > &ds)
SizeType NewState (SizeType out, SizeType out1, unsigned codepoint)
void PushOperand (Stack< Allocator > &operandStack, unsigned codepoint)
void ImplicitConcatenation (Stack< Allocator > &atomCountStack, Stack< Allocator > &operatorStack)
SizeType Append (SizeType l1, SizeType l2)
void Patch (SizeType l, SizeType s)
bool Eval (Stack< Allocator > &operandStack, Operator op)
bool EvalQuantifier (Stack< Allocator > &operandStack, unsigned n, unsigned m)
void CloneTopOperand (Stack< Allocator > &operandStack)
template<typename InputStream >
bool ParseUnsigned (DecodedStream< InputStream > &ds, unsigned *u)
template<typename InputStream >
bool ParseRange (DecodedStream< InputStream > &ds, SizeType *range)
SizeType NewRange (unsigned codepoint)
template<typename InputStream >
bool CharacterEscape (DecodedStream< InputStream > &ds, unsigned *escapedCodepoint)
template<typename InputStream >
bool SearchWithAnchoring (InputStream &is, bool anchorBegin, bool anchorEnd) const
size_t GetStateSetSize () const
bool AddState (Stack< Allocator > &l, SizeType index) const
bool MatchRange (SizeType rangeIndex, unsigned codepoint) const

Static Private Member Functions

static SizeType Min (SizeType a, SizeType b)

Private Attributes

Stack< Allocator > states_
Stack< Allocator > ranges_
SizeType root_
SizeType stateCount_
SizeType rangeCount_
uint32_tstateSet_
Stack< Allocator > state0_
Stack< Allocator > state1_
bool anchorBegin_
bool anchorEnd_

Static Private Attributes

static const unsigned kAnyCharacterClass = 0xFFFFFFFF
 For '.'.
static const unsigned kRangeCharacterClass = 0xFFFFFFFE
static const unsigned kRangeNegationFlag = 0x80000000
static const unsigned kInfinityQuantifier = ~0u

Detailed Description

template<typename Encoding, typename Allocator = CrtAllocator>
class internal::GenericRegex< Encoding, Allocator >

Regular expression engine with subset of ECMAscript grammar.

Supported regular expression syntax:

Note
This is a Thompson NFA engine, implemented with reference to Cox, Russ. "Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby,...).", https://swtch.com/~rsc/regexp/regexp1.html

Member Typedef Documentation

template<typename Encoding , typename Allocator = CrtAllocator>
typedef Encoding::Ch internal::GenericRegex< Encoding, Allocator >::Ch

Member Enumeration Documentation

template<typename Encoding , typename Allocator = CrtAllocator>
enum internal::GenericRegex::Operator
private
Enumerator:
kZeroOrOne 
kZeroOrMore 
kOneOrMore 
kConcatenation 
kAlternation 
kLeftParenthesis 

Constructor & Destructor Documentation

template<typename Encoding , typename Allocator = CrtAllocator>
internal::GenericRegex< Encoding, Allocator >::GenericRegex ( const Ch source,
Allocator *  allocator = 0 
)
inline
template<typename Encoding , typename Allocator = CrtAllocator>
internal::GenericRegex< Encoding, Allocator >::~GenericRegex ( )
inline

Member Function Documentation

template<typename Encoding , typename Allocator = CrtAllocator>
bool internal::GenericRegex< Encoding, Allocator >::IsValid ( void  ) const
inline
template<typename Encoding , typename Allocator = CrtAllocator>
template<typename InputStream >
bool internal::GenericRegex< Encoding, Allocator >::Match ( InputStream &  is) const
inline
template<typename Encoding , typename Allocator = CrtAllocator>
bool internal::GenericRegex< Encoding, Allocator >::Match ( const Ch s) const
inline
template<typename Encoding , typename Allocator = CrtAllocator>
template<typename InputStream >
bool internal::GenericRegex< Encoding, Allocator >::Search ( InputStream &  is) const
inline
template<typename Encoding , typename Allocator = CrtAllocator>
bool internal::GenericRegex< Encoding, Allocator >::Search ( const Ch s) const
inline
template<typename Encoding , typename Allocator = CrtAllocator>
State& internal::GenericRegex< Encoding, Allocator >::GetState ( SizeType  index)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
const State& internal::GenericRegex< Encoding, Allocator >::GetState ( SizeType  index) const
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
Range& internal::GenericRegex< Encoding, Allocator >::GetRange ( SizeType  index)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
const Range& internal::GenericRegex< Encoding, Allocator >::GetRange ( SizeType  index) const
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
template<typename InputStream >
void internal::GenericRegex< Encoding, Allocator >::Parse ( DecodedStream< InputStream > &  ds)
inlineprivate

References internal::GenericRegex< Encoding, Allocator >::anchorBegin_, internal::GenericRegex< Encoding, Allocator >::anchorEnd_, internal::GenericRegex< Encoding, Allocator >::CharacterEscape(), internal::GenericRegex< Encoding, Allocator >::State::codepoint, exprtk::details::numeric::constant::e, internal::Stack< Allocator >::Empty(), internal::GenericRegex< Encoding, Allocator >::Eval(), internal::GenericRegex< Encoding, Allocator >::EvalQuantifier(), internal::Stack< Allocator >::GetSize(), internal::GenericRegex< Encoding, Allocator >::GetState(), internal::GenericRegex< Encoding, Allocator >::GetStateSetSize(), internal::GenericRegex< Encoding, Allocator >::ImplicitConcatenation(), internal::GenericRegex< Encoding, Allocator >::kAlternation, internal::GenericRegex< Encoding, Allocator >::kAnyCharacterClass, internal::GenericRegex< Encoding, Allocator >::kInfinityQuantifier, internal::GenericRegex< Encoding, Allocator >::kLeftParenthesis, internal::GenericRegex< Encoding, Allocator >::kOneOrMore, internal::GenericRegex< Encoding, Allocator >::kRangeCharacterClass, internal::kRegexInvalidState, internal::GenericRegex< Encoding, Allocator >::kZeroOrMore, internal::GenericRegex< Encoding, Allocator >::kZeroOrOne, internal::GenericRegex< Encoding, Allocator >::NewState(), internal::GenericRegex< Encoding, Allocator >::State::out, internal::GenericRegex< Encoding, Allocator >::Frag::out, internal::GenericRegex< Encoding, Allocator >::State::out1, internal::GenericRegex< Encoding, Allocator >::ParseRange(), internal::GenericRegex< Encoding, Allocator >::ParseUnsigned(), internal::GenericRegex< Encoding, Allocator >::Patch(), internal::GenericRegex< Encoding, Allocator >::DecodedStream< SourceStream >::Peek(), internal::GenericRegex< Encoding, Allocator >::PushOperand(), internal::GenericRegex< Encoding, Allocator >::State::rangeStart, RAPIDJSON_ASSERT, internal::GenericRegex< Encoding, Allocator >::root_, SizeType, internal::GenericRegex< Encoding, Allocator >::Frag::start, internal::GenericRegex< Encoding, Allocator >::state0_, internal::GenericRegex< Encoding, Allocator >::state1_, internal::GenericRegex< Encoding, Allocator >::stateCount_, internal::GenericRegex< Encoding, Allocator >::states_, internal::GenericRegex< Encoding, Allocator >::stateSet_, and internal::GenericRegex< Encoding, Allocator >::DecodedStream< SourceStream >::Take().

Referenced by internal::GenericRegex< Encoding, Allocator >::GenericRegex().

template<typename Encoding , typename Allocator = CrtAllocator>
SizeType internal::GenericRegex< Encoding, Allocator >::NewState ( SizeType  out,
SizeType  out1,
unsigned  codepoint 
)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
void internal::GenericRegex< Encoding, Allocator >::PushOperand ( Stack< Allocator > &  operandStack,
unsigned  codepoint 
)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
void internal::GenericRegex< Encoding, Allocator >::ImplicitConcatenation ( Stack< Allocator > &  atomCountStack,
Stack< Allocator > &  operatorStack 
)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
SizeType internal::GenericRegex< Encoding, Allocator >::Append ( SizeType  l1,
SizeType  l2 
)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
void internal::GenericRegex< Encoding, Allocator >::Patch ( SizeType  l,
SizeType  s 
)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
bool internal::GenericRegex< Encoding, Allocator >::Eval ( Stack< Allocator > &  operandStack,
Operator  op 
)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
bool internal::GenericRegex< Encoding, Allocator >::EvalQuantifier ( Stack< Allocator > &  operandStack,
unsigned  n,
unsigned  m 
)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
static SizeType internal::GenericRegex< Encoding, Allocator >::Min ( SizeType  a,
SizeType  b 
)
inlinestaticprivate
template<typename Encoding , typename Allocator = CrtAllocator>
void internal::GenericRegex< Encoding, Allocator >::CloneTopOperand ( Stack< Allocator > &  operandStack)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
template<typename InputStream >
bool internal::GenericRegex< Encoding, Allocator >::ParseUnsigned ( DecodedStream< InputStream > &  ds,
unsigned *  u 
)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
template<typename InputStream >
bool internal::GenericRegex< Encoding, Allocator >::ParseRange ( DecodedStream< InputStream > &  ds,
SizeType range 
)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
SizeType internal::GenericRegex< Encoding, Allocator >::NewRange ( unsigned  codepoint)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
template<typename InputStream >
bool internal::GenericRegex< Encoding, Allocator >::CharacterEscape ( DecodedStream< InputStream > &  ds,
unsigned *  escapedCodepoint 
)
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
template<typename InputStream >
bool internal::GenericRegex< Encoding, Allocator >::SearchWithAnchoring ( InputStream &  is,
bool  anchorBegin,
bool  anchorEnd 
) const
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
size_t internal::GenericRegex< Encoding, Allocator >::GetStateSetSize ( ) const
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
bool internal::GenericRegex< Encoding, Allocator >::AddState ( Stack< Allocator > &  l,
SizeType  index 
) const
inlineprivate
template<typename Encoding , typename Allocator = CrtAllocator>
bool internal::GenericRegex< Encoding, Allocator >::MatchRange ( SizeType  rangeIndex,
unsigned  codepoint 
) const
inlineprivate

Member Data Documentation

template<typename Encoding , typename Allocator = CrtAllocator>
const unsigned internal::GenericRegex< Encoding, Allocator >::kAnyCharacterClass = 0xFFFFFFFF
staticprivate
template<typename Encoding , typename Allocator = CrtAllocator>
const unsigned internal::GenericRegex< Encoding, Allocator >::kRangeCharacterClass = 0xFFFFFFFE
staticprivate
template<typename Encoding , typename Allocator = CrtAllocator>
const unsigned internal::GenericRegex< Encoding, Allocator >::kRangeNegationFlag = 0x80000000
staticprivate
template<typename Encoding , typename Allocator = CrtAllocator>
Stack<Allocator> internal::GenericRegex< Encoding, Allocator >::states_
private
template<typename Encoding , typename Allocator = CrtAllocator>
Stack<Allocator> internal::GenericRegex< Encoding, Allocator >::ranges_
private
template<typename Encoding , typename Allocator = CrtAllocator>
SizeType internal::GenericRegex< Encoding, Allocator >::root_
private
template<typename Encoding , typename Allocator = CrtAllocator>
SizeType internal::GenericRegex< Encoding, Allocator >::stateCount_
private
template<typename Encoding , typename Allocator = CrtAllocator>
SizeType internal::GenericRegex< Encoding, Allocator >::rangeCount_
private
template<typename Encoding , typename Allocator = CrtAllocator>
const unsigned internal::GenericRegex< Encoding, Allocator >::kInfinityQuantifier = ~0u
staticprivate
template<typename Encoding , typename Allocator = CrtAllocator>
uint32_t* internal::GenericRegex< Encoding, Allocator >::stateSet_
private
template<typename Encoding , typename Allocator = CrtAllocator>
Stack<Allocator> internal::GenericRegex< Encoding, Allocator >::state0_
mutableprivate
template<typename Encoding , typename Allocator = CrtAllocator>
Stack<Allocator> internal::GenericRegex< Encoding, Allocator >::state1_
mutableprivate
template<typename Encoding , typename Allocator = CrtAllocator>
bool internal::GenericRegex< Encoding, Allocator >::anchorBegin_
private
template<typename Encoding , typename Allocator = CrtAllocator>
bool internal::GenericRegex< Encoding, Allocator >::anchorEnd_
private

The documentation for this class was generated from the following file:


Copyright © 2005-2023 MAK Technologies. All Rights Reserved (www.mak.com)