NCBI C++ ToolKit
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
mu::ParserTokenReader Class Reference

Search Toolkit Book for mu::ParserTokenReader

Token reader for the ParserBase class. More...

#include <gui/utils/muparser/muParserTokenReader.h>

+ Collaboration diagram for mu::ParserTokenReader:

Public Member Functions

 ParserTokenReader (ParserBase *a_pParent)
 Constructor. More...
 
ParserTokenReaderClone (ParserBase *a_pParent) const
 Create instance of a ParserTokenReader identical with this and return its pointer. More...
 
void AddValIdent (identfun_type a_pCallback)
 
void SetVarCreator (facfun_type a_pFactory, void *pUserData)
 
void SetFormula (const string_type &a_strFormula)
 Initialize the token Reader. More...
 
void SetArgSep (char_type cArgSep)
 
int GetPos () const
 Return the current position of the token reader in the formula string. More...
 
const string_typeGetFormula () const
 Return a reference to the formula. More...
 
const varmap_typeGetUsedVar () const
 Return a map containing the used variables only. More...
 
char_type GetArgSep () const
 
void IgnoreUndefVar (bool bIgnore)
 Set Flag that contronls behaviour in case of undefined variables beeing found. More...
 
void ReInit ()
 Reset the token reader to the start of the formula. More...
 
token_type ReadNextToken ()
 Read the next token from the string. More...
 

Private Types

enum  ESynCodes {
  noBO = 1 << 0 , noBC = 1 << 1 , noVAL = 1 << 2 , noVAR = 1 << 3 ,
  noARG_SEP = 1 << 4 , noFUN = 1 << 5 , noOPT = 1 << 6 , noPOSTOP = 1 << 7 ,
  noINFIXOP = 1 << 8 , noEND = 1 << 9 , noSTR = 1 << 10 , noASSIGN = 1 << 11 ,
  noANY = ~0
}
 Syntax codes. More...
 
typedef ParserToken< value_type, string_typetoken_type
 

Private Member Functions

 ParserTokenReader (const ParserTokenReader &a_Reader)
 Copy constructor. More...
 
ParserTokenReaderoperator= (const ParserTokenReader &a_Reader)
 Assignement operator. More...
 
void Assign (const ParserTokenReader &a_Reader)
 Assign state of a token reader to this token reader. More...
 
void SetParent (ParserBase *a_pParent)
 
int ExtractToken (const char_type *a_szCharSet, string_type &a_strTok, int a_iPos) const
 Extract all characters that belong to a certain charset. More...
 
bool IsBuiltIn (token_type &a_Tok)
 Check if a built in operator or other token can be found. More...
 
bool IsArgSep (token_type &a_Tok)
 
bool IsEOF (token_type &a_Tok)
 Check for End of Formula. More...
 
bool IsInfixOpTok (token_type &a_Tok)
 Check if a string position contains a unary infix operator. More...
 
bool IsFunTok (token_type &a_Tok)
 Check whether the token at a given position is a function token. More...
 
bool IsPostOpTok (token_type &a_Tok)
 Check if a string position contains a unary post value operator. More...
 
bool IsOprt (token_type &a_Tok)
 Check if a string position contains a binary operator. More...
 
bool IsValTok (token_type &a_Tok)
 Check whether the token at a given position is a value token. More...
 
bool IsVarTok (token_type &a_Tok)
 Check wheter a token at a given position is a variable token. More...
 
bool IsStrVarTok (token_type &a_Tok)
 
bool IsUndefVarTok (token_type &a_Tok)
 Check wheter a token at a given position is an undefined variable. More...
 
bool IsString (token_type &a_Tok)
 Check wheter a token at a given position is a string. More...
 
void Error (EErrorCodes a_iErrc, int a_iPos=-1, const string_type &a_sTok=string_type()) const
 Create an error containing the parse error position. More...
 
token_typeSaveBeforeReturn (const token_type &tok)
 

Private Attributes

ParserBasem_pParser
 
string_type m_strFormula
 
int m_iPos
 
int m_iSynFlags
 
bool m_bIgnoreUndefVar
 
const funmap_typem_pFunDef
 
const funmap_typem_pPostOprtDef
 
const funmap_typem_pInfixOprtDef
 
const funmap_typem_pOprtDef
 
const valmap_typem_pConstDef
 
const strmap_typem_pStrVarDef
 
varmap_typem_pVarDef
 The only non const pointer to parser internals. More...
 
facfun_type m_pFactory
 
void * m_pFactoryData
 
std::vector< identfun_typem_vIdentFun
 Value token identification function. More...
 
varmap_type m_UsedVar
 
value_type m_fZero
 Dummy value of zero, referenced by undefined variables. More...
 
int m_iBrackets
 
token_type m_lastTok
 
char_type m_cArgSep
 The character used for separating function arguments. More...
 

Detailed Description

Token reader for the ParserBase class.

Definition at line 53 of file muParserTokenReader.h.

Member Typedef Documentation

◆ token_type

Definition at line 57 of file muParserTokenReader.h.

Member Enumeration Documentation

◆ ESynCodes

Syntax codes.

The syntax codes control the syntax check done during the first time parsing of the expression string. They are flags that indicate which tokens are allowed next if certain tokens are identified.

Enumerator
noBO 

to avoid i.e. "cos(7)("

noBC 

to avoid i.e. "sin)" or "()"

noVAL 

to avoid i.e. "tan 2" or "sin(8)3.14"

noVAR 

to avoid i.e. "sin a" or "sin(8)a"

noARG_SEP 

to avoid i.e. ",," or "+," ...

noFUN 

to avoid i.e. "sqrt cos" or "(1)sin"

noOPT 

to avoid i.e. "(+)"

noPOSTOP 

to avoid i.e. "(5!!)" "sin!"

noINFIXOP 

to avoid i.e. "++4" "!!4"

noEND 

to avoid unexpected end of formula

noSTR 

to block numeric arguments on string functions

noASSIGN 

to block assignement to constant i.e. "4=7"

noANY 

All of he above flags set.

Definition at line 86 of file muParserTokenReader.h.

Constructor & Destructor Documentation

◆ ParserTokenReader() [1/2]

mu::ParserTokenReader::ParserTokenReader ( ParserBase a_pParent)

Constructor.

Create a Token reader and bind it to a parser object.

Precondition
[assert] a_pParser may not be NULL
Postcondition
m_pParser==a_pParser
Parameters
a_pParentParent parser object of the token reader.

Definition at line 114 of file muParserTokenReader.cpp.

References assert, m_pParser, and SetParent().

Referenced by Clone().

◆ ParserTokenReader() [2/2]

mu::ParserTokenReader::ParserTokenReader ( const ParserTokenReader a_Reader)
private

Copy constructor.

See also
Assign
Exceptions
nothrow

Definition at line 55 of file muParserTokenReader.cpp.

References Assign().

Member Function Documentation

◆ AddValIdent()

void mu::ParserTokenReader::AddValIdent ( identfun_type  a_pCallback)

Definition at line 164 of file muParserTokenReader.cpp.

References m_vIdentFun.

◆ Assign()

void mu::ParserTokenReader::Assign ( const ParserTokenReader a_Reader)
private

Assign state of a token reader to this token reader.

Parameters
a_ReaderObject from which the state should be copied.
Exceptions
nothrow

Definition at line 82 of file muParserTokenReader.cpp.

References m_bIgnoreUndefVar, m_cArgSep, m_iBrackets, m_iPos, m_iSynFlags, m_pConstDef, m_pFactory, m_pFactoryData, m_pFunDef, m_pInfixOprtDef, m_pOprtDef, m_pParser, m_pPostOprtDef, m_pStrVarDef, m_pVarDef, m_strFormula, m_UsedVar, and m_vIdentFun.

Referenced by operator=(), and ParserTokenReader().

◆ Clone()

ParserTokenReader * mu::ParserTokenReader::Clone ( ParserBase a_pParent) const

Create instance of a ParserTokenReader identical with this and return its pointer.

This is a factory method the calling function must take care of the object destruction.

Returns
A new ParserTokenReader object.
Exceptions
nothrow

Definition at line 149 of file muParserTokenReader.cpp.

References ParserTokenReader().

◆ Error()

void mu::ParserTokenReader::Error ( EErrorCodes  a_iErrc,
int  a_iPos = -1,
const string_type a_sTok = string_type() 
) const
private

Create an error containing the parse error position.

This function will create an Parser Exception object containing the error text and its position.

Parameters
a_iErrc[in] The error code of type EErrorCodes.
a_iPos[in] The position where the error was detected.
a_strTok[in] The token string representation associated with the error.
Exceptions
ParserExceptionalways throws thats the only purpose of this function.

Definition at line 829 of file muParserTokenReader.cpp.

References mu::ParserBase::Error(), and m_pParser.

Referenced by IsArgSep(), IsBuiltIn(), IsEOF(), IsFunTok(), IsInfixOpTok(), IsOprt(), IsPostOpTok(), IsString(), IsStrVarTok(), IsUndefVarTok(), IsValTok(), IsVarTok(), and ReadNextToken().

◆ ExtractToken()

int mu::ParserTokenReader::ExtractToken ( const char_type a_szCharSet,
string_type a_sTok,
int  a_iPos 
) const
private

Extract all characters that belong to a certain charset.

Parameters
a_szCharSet[in] Const char array of the characters allowed in the token.
a_strTok[out] The string that consists entirely of characters listed in a_szCharSet.
a_iPos[in] Position in the string from where to start reading.
Returns
The Position of the first character not listed in a_szCharSet.
Exceptions
nothrow

Definition at line 319 of file muParserTokenReader.cpp.

References int, and m_strFormula.

Referenced by IsFunTok(), IsInfixOpTok(), IsOprt(), IsPostOpTok(), IsStrVarTok(), IsUndefVarTok(), IsValTok(), IsVarTok(), and ReadNextToken().

◆ GetArgSep()

char_type mu::ParserTokenReader::GetArgSep ( ) const

Definition at line 843 of file muParserTokenReader.cpp.

References m_cArgSep.

◆ GetFormula()

const string_type & mu::ParserTokenReader::GetFormula ( ) const

Return a reference to the formula.

Returns
m_strFormula
Exceptions
nothrow

Definition at line 193 of file muParserTokenReader.cpp.

References m_strFormula.

◆ GetPos()

int mu::ParserTokenReader::GetPos ( void  ) const

Return the current position of the token reader in the formula string.

Returns
m_iPos
Exceptions
nothrow

Definition at line 182 of file muParserTokenReader.cpp.

References m_iPos.

◆ GetUsedVar()

const varmap_type & mu::ParserTokenReader::GetUsedVar ( ) const

Return a map containing the used variables only.

Definition at line 200 of file muParserTokenReader.cpp.

References m_UsedVar.

◆ IgnoreUndefVar()

void mu::ParserTokenReader::IgnoreUndefVar ( bool  bIgnore)

Set Flag that contronls behaviour in case of undefined variables beeing found.

If true, the parser does not throw an exception if an undefined variable is found. otherwise it does. This variable is used internally only! It supresses a "undefined variable" exception in GetUsedVar(). Those function should return a complete list of variables including those the are not defined by the time of it's call.

Definition at line 226 of file muParserTokenReader.cpp.

References m_bIgnoreUndefVar.

◆ IsArgSep()

bool mu::ParserTokenReader::IsArgSep ( token_type a_Tok)
private

◆ IsBuiltIn()

bool mu::ParserTokenReader::IsBuiltIn ( token_type a_Tok)
private

◆ IsEOF()

bool mu::ParserTokenReader::IsEOF ( token_type a_Tok)
private

Check for End of Formula.

Returns
true if an end of formula is found false otherwise.
Parameters
a_Tok[out] If an eof is found the corresponding token will be stored there.
Exceptions
nothrow
See also
IsOprt, IsFunTok, IsStrFunTok, IsValTok, IsVarTok, IsString, IsInfixOpTok, IsPostOpTok

Definition at line 457 of file muParserTokenReader.cpp.

References mu::cmEND, mu::ecMISSING_PARENS, mu::ecUNEXPECTED_EOF, Error(), m_iBrackets, m_iPos, m_iSynFlags, m_strFormula, noEND, mu::ParserToken< TBase, TString >::Set(), and wxT.

Referenced by ReadNextToken().

◆ IsFunTok()

bool mu::ParserTokenReader::IsFunTok ( token_type a_Tok)
private

Check whether the token at a given position is a function token.

Parameters
a_Tok[out] If a value token is found it will be placed here.
Exceptions
ParserExceptionif Syntaxflags do not allow a function at a_iPos
Returns
true if a function token has been found false otherwise.
Precondition
[assert] m_pParser!=0

Definition at line 510 of file muParserTokenReader.cpp.

References mu::ecUNEXPECTED_FUN, Error(), ExtractToken(), mu::ParserToken< TBase, TString >::GetAsString(), int, m_iPos, m_iSynFlags, m_pFunDef, m_pParser, noANY, noBO, noFUN, mu::ParserToken< TBase, TString >::Set(), and mu::ParserBase::ValidNameChars().

Referenced by ReadNextToken().

◆ IsInfixOpTok()

bool mu::ParserTokenReader::IsInfixOpTok ( token_type a_Tok)
private

Check if a string position contains a unary infix operator.

Returns
true if a function token has been found false otherwise.

Definition at line 482 of file muParserTokenReader.cpp.

References mu::ecUNEXPECTED_OPERATOR, Error(), ExtractToken(), mu::ParserToken< TBase, TString >::GetAsString(), int, m_iPos, m_iSynFlags, m_pInfixOprtDef, m_pParser, noASSIGN, noBC, noINFIXOP, noOPT, noPOSTOP, noSTR, mu::ParserToken< TBase, TString >::Set(), and mu::ParserBase::ValidInfixOprtChars().

Referenced by IsBuiltIn(), IsOprt(), and ReadNextToken().

◆ IsOprt()

bool mu::ParserTokenReader::IsOprt ( token_type a_Tok)
private

Check if a string position contains a binary operator.

Parameters
a_Tok[out] Operator token if one is found. This can either be a binary operator or an infix operator token.
Returns
true if an operator token has been found.

Definition at line 536 of file muParserTokenReader.cpp.

References mu::ecUNEXPECTED_OPERATOR, Error(), ExtractToken(), mu::ParserToken< TBase, TString >::GetAsString(), int, IsInfixOpTok(), m_iPos, m_iSynFlags, m_pOprtDef, m_pParser, noARG_SEP, noASSIGN, noBC, noEND, noOPT, noPOSTOP, mu::ParserToken< TBase, TString >::Set(), and mu::ParserBase::ValidOprtChars().

Referenced by ReadNextToken().

◆ IsPostOpTok()

bool mu::ParserTokenReader::IsPostOpTok ( token_type a_Tok)
private

◆ IsString()

bool mu::ParserTokenReader::IsString ( token_type a_Tok)
private

Check wheter a token at a given position is a string.

Parameters
a_Tok[out] If a variable token has been found it will be placed here.
Returns
true if a string token has been found.
See also
IsOprt, IsFunTok, IsStrFunTok, IsValTok, IsVarTok, IsEOF, IsInfixOpTok, IsPostOpTok
Exceptions
nothrow

Definition at line 786 of file muParserTokenReader.cpp.

References mu::ecUNEXPECTED_STR, mu::ecUNTERMINATED_STRING, Error(), int, m_iPos, m_iSynFlags, m_pParser, m_strFormula, mu::ParserBase::m_vStringBuf, noANY, noARG_SEP, noBC, noEND, noOPT, noSTR, mu::ParserToken< TBase, TString >::SetString(), and wxT.

Referenced by ReadNextToken().

◆ IsStrVarTok()

bool mu::ParserTokenReader::IsStrVarTok ( token_type a_Tok)
private

◆ IsUndefVarTok()

bool mu::ParserTokenReader::IsUndefVarTok ( token_type a_Tok)
private

Check wheter a token at a given position is an undefined variable.

Parameters
a_Tok[out] If a variable tom_pParser->m_vStringBufken has been found it will be placed here.
Returns
true if a variable token has been found.
Exceptions
nothrow

Definition at line 734 of file muParserTokenReader.cpp.

References mu::ecUNEXPECTED_VAR, Error(), ExtractToken(), mu::ParserToken< TBase, TString >::GetAsString(), m_fZero, m_iPos, m_iSynFlags, m_pFactory, m_pFactoryData, m_pParser, m_UsedVar, noBO, noFUN, noINFIXOP, noPOSTOP, noSTR, noVAL, noVAR, mu::ParserToken< TBase, TString >::SetVar(), and mu::ParserBase::ValidNameChars().

Referenced by ReadNextToken().

◆ IsValTok()

bool mu::ParserTokenReader::IsValTok ( token_type a_Tok)
private

Check whether the token at a given position is a value token.

Value tokens are either values or constants.

Parameters
a_Tok[out] If a value token is found it will be placed here.
Returns
true if a value token has been found.

Definition at line 611 of file muParserTokenReader.cpp.

References assert, mu::ecUNEXPECTED_VAL, Error(), ExtractToken(), m_iPos, m_iSynFlags, m_pConstDef, m_pParser, m_strFormula, m_vIdentFun, noASSIGN, noBO, noFUN, noINFIXOP, noSTR, noVAL, noVAR, mu::ParserToken< TBase, TString >::SetVal(), and mu::ParserBase::ValidNameChars().

Referenced by ReadNextToken().

◆ IsVarTok()

bool mu::ParserTokenReader::IsVarTok ( token_type a_Tok)
private

Check wheter a token at a given position is a variable token.

Parameters
a_Tok[out] If a variable token has been found it will be placed here.
Returns
true if a variable token has been found.

Definition at line 673 of file muParserTokenReader.cpp.

References mu::ecUNEXPECTED_VAR, Error(), ExtractToken(), m_iPos, m_iSynFlags, m_pParser, m_pVarDef, m_UsedVar, noBO, noFUN, noINFIXOP, noPOSTOP, noSTR, noVAL, noVAR, mu::ParserToken< TBase, TString >::SetVar(), and mu::ParserBase::ValidNameChars().

Referenced by ReadNextToken().

◆ operator=()

ParserTokenReader & mu::ParserTokenReader::operator= ( const ParserTokenReader a_Reader)
private

Assignement operator.

Self assignement will be suppressed otherwise Assign is called.

Parameters
a_ReaderObject to copy to this token reader.
Exceptions
nothrow

Definition at line 68 of file muParserTokenReader.cpp.

References Assign().

◆ ReadNextToken()

ParserTokenReader::token_type mu::ParserTokenReader::ReadNextToken ( )

◆ ReInit()

void mu::ParserTokenReader::ReInit ( )

Reset the token reader to the start of the formula.

The syntax flags will be reset to a value appropriate for the start of a formula.

Postcondition
m_iPos==0, m_iSynFlags = noOPT | noBC | noPOSTOP | noSTR
Exceptions
nothrow
See also
ESynCodes

Definition at line 240 of file muParserTokenReader.cpp.

References m_iBrackets, m_iPos, m_iSynFlags, m_lastTok, m_UsedVar, noASSIGN, noBC, noOPT, and noPOSTOP.

Referenced by SetFormula().

◆ SaveBeforeReturn()

ParserTokenReader::token_type & mu::ParserTokenReader::SaveBeforeReturn ( const token_type tok)
private

Definition at line 157 of file muParserTokenReader.cpp.

References m_lastTok.

Referenced by ReadNextToken().

◆ SetArgSep()

void mu::ParserTokenReader::SetArgSep ( char_type  cArgSep)

Definition at line 837 of file muParserTokenReader.cpp.

References m_cArgSep.

◆ SetFormula()

void mu::ParserTokenReader::SetFormula ( const string_type a_strFormula)

Initialize the token Reader.

Sets the formula position index to zero and set Syntax flags to default for initial formula parsing.

Precondition
[assert] triggered if a_szFormula==0

Definition at line 211 of file muParserTokenReader.cpp.

References m_strFormula, and ReInit().

◆ SetParent()

void mu::ParserTokenReader::SetParent ( ParserBase a_pParent)
private

◆ SetVarCreator()

void mu::ParserTokenReader::SetVarCreator ( facfun_type  a_pFactory,
void *  pUserData 
)

Definition at line 170 of file muParserTokenReader.cpp.

References m_pFactory, and m_pFactoryData.

Member Data Documentation

◆ m_bIgnoreUndefVar

bool mu::ParserTokenReader::m_bIgnoreUndefVar
private

Definition at line 133 of file muParserTokenReader.h.

Referenced by Assign(), IgnoreUndefVar(), and ReadNextToken().

◆ m_cArgSep

char_type mu::ParserTokenReader::m_cArgSep
private

The character used for separating function arguments.

Definition at line 149 of file muParserTokenReader.h.

Referenced by Assign(), GetArgSep(), IsArgSep(), and SetArgSep().

◆ m_fZero

value_type mu::ParserTokenReader::m_fZero
private

Dummy value of zero, referenced by undefined variables.

Definition at line 146 of file muParserTokenReader.h.

Referenced by IsUndefVarTok().

◆ m_iBrackets

int mu::ParserTokenReader::m_iBrackets
private

Definition at line 147 of file muParserTokenReader.h.

Referenced by Assign(), IsBuiltIn(), IsEOF(), and ReInit().

◆ m_iPos

int mu::ParserTokenReader::m_iPos
private

◆ m_iSynFlags

int mu::ParserTokenReader::m_iSynFlags
private

◆ m_lastTok

token_type mu::ParserTokenReader::m_lastTok
private

Definition at line 148 of file muParserTokenReader.h.

Referenced by IsBuiltIn(), ReInit(), and SaveBeforeReturn().

◆ m_pConstDef

const valmap_type* mu::ParserTokenReader::m_pConstDef
private

Definition at line 139 of file muParserTokenReader.h.

Referenced by Assign(), IsValTok(), and SetParent().

◆ m_pFactory

facfun_type mu::ParserTokenReader::m_pFactory
private

Definition at line 142 of file muParserTokenReader.h.

Referenced by Assign(), IsUndefVarTok(), ReadNextToken(), and SetVarCreator().

◆ m_pFactoryData

void* mu::ParserTokenReader::m_pFactoryData
private

Definition at line 143 of file muParserTokenReader.h.

Referenced by Assign(), IsUndefVarTok(), and SetVarCreator().

◆ m_pFunDef

const funmap_type* mu::ParserTokenReader::m_pFunDef
private

Definition at line 135 of file muParserTokenReader.h.

Referenced by Assign(), IsFunTok(), and SetParent().

◆ m_pInfixOprtDef

const funmap_type* mu::ParserTokenReader::m_pInfixOprtDef
private

Definition at line 137 of file muParserTokenReader.h.

Referenced by Assign(), IsInfixOpTok(), and SetParent().

◆ m_pOprtDef

const funmap_type* mu::ParserTokenReader::m_pOprtDef
private

Definition at line 138 of file muParserTokenReader.h.

Referenced by Assign(), IsOprt(), and SetParent().

◆ m_pParser

ParserBase* mu::ParserTokenReader::m_pParser
private

◆ m_pPostOprtDef

const funmap_type* mu::ParserTokenReader::m_pPostOprtDef
private

Definition at line 136 of file muParserTokenReader.h.

Referenced by Assign(), IsPostOpTok(), and SetParent().

◆ m_pStrVarDef

const strmap_type* mu::ParserTokenReader::m_pStrVarDef
private

Definition at line 140 of file muParserTokenReader.h.

Referenced by Assign(), IsStrVarTok(), and SetParent().

◆ m_pVarDef

varmap_type* mu::ParserTokenReader::m_pVarDef
private

The only non const pointer to parser internals.

Definition at line 141 of file muParserTokenReader.h.

Referenced by Assign(), IsVarTok(), and SetParent().

◆ m_strFormula

string_type mu::ParserTokenReader::m_strFormula
private

◆ m_UsedVar

varmap_type mu::ParserTokenReader::m_UsedVar
private

Definition at line 145 of file muParserTokenReader.h.

Referenced by Assign(), GetUsedVar(), IsUndefVarTok(), IsVarTok(), and ReInit().

◆ m_vIdentFun

std::vector<identfun_type> mu::ParserTokenReader::m_vIdentFun
private

Value token identification function.

Definition at line 144 of file muParserTokenReader.h.

Referenced by AddValIdent(), Assign(), and IsValTok().


The documentation for this class was generated from the following files:
Modified on Tue Apr 23 07:38:40 2024 by modify_doxy.py rev. 669887