muParser: mu::ParserTokenReader Class Reference

# mu::ParserTokenReader Class Reference

Token reader for the ParserBase class. More...

`#include <muParserTokenReader.h>`

List of all members.

## Public Member Functions
| ParserTokenReader (ParserBase *a_pParent)
| Constructor.
ParserTokenReader * | Clone (ParserBase *a_pParent) const
| Create instance of a ParserTokenReader identical with this and return its pointer.
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.
void | SetArgSep (char_type cArgSep)
int | GetPos () const
| Return the current position of the token reader in the formula string.
const string_type & | GetFormula () const
| Return a reference to the formula.
const varmap_type & | GetUsedVar () const
| Return a map containing the used variables only.
char_type | GetArgSep () const
void | IgnoreUndefVar (bool bIgnore)
| Set Flag that contronls behaviour in case of undefined variables beeing found.
void | ReInit ()
| Reset the token reader to the start of the formula.
token_type | ReadNextToken ()
| Read the next token from the string.
## 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_type > | token_type
## Private Member Functions
| ParserTokenReader (const ParserTokenReader &a_Reader)
| Copy constructor.
ParserTokenReader & | operator= (const ParserTokenReader &a_Reader)
| Assignement operator.
void | Assign (const ParserTokenReader &a_Reader)
| Assign state of a token reader to this token reader.
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.
bool | IsBuiltIn (token_type &a_Tok)
| Check if a built in operator or other token can be found.
bool | IsArgSep (token_type &a_Tok)
bool | IsEOF (token_type &a_Tok)
| Check for End of Formula.
bool | IsInfixOpTok (token_type &a_Tok)
| Check if a string position contains a unary infix operator.
bool | IsFunTok (token_type &a_Tok)
| Check whether the token at a given position is a function token.
bool | IsPostOpTok (token_type &a_Tok)
| Check if a string position contains a unary post value operator.
bool | IsOprt (token_type &a_Tok)
| Check if a string position contains a binary operator.
bool | IsValTok (token_type &a_Tok)
| Check whether the token at a given position is a value token.
bool | IsVarTok (token_type &a_Tok)
| Check wheter a token at a given position is a variable token.
bool | IsStrVarTok (token_type &a_Tok)
bool | IsUndefVarTok (token_type &a_Tok)
| Check wheter a token at a given position is an undefined variable.
bool | IsString (token_type &a_Tok)
| Check wheter a token at a given position is a string.
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.
token_type & | SaveBeforeReturn (const token_type &tok)
## Private Attributes
ParserBase * | m_pParser
string_type | m_strFormula
int | m_iPos
int | m_iSynFlags
bool | m_bIgnoreUndefVar
const funmap_type * | m_pFunDef
const funmap_type * | m_pPostOprtDef
const funmap_type * | m_pInfixOprtDef
const funmap_type * | m_pOprtDef
const valmap_type * | m_pConstDef
const strmap_type * | m_pStrVarDef
varmap_type * | m_pVarDef
| The only non const pointer to parser internals.
facfun_type | m_pFactory
void * | m_pFactoryData
std::vector< identfun_type > | m_vIdentFun
| Value token identification function.
varmap_type | m_UsedVar
value_type | m_fZero
| Dummy value of zero, referenced by undefined variables.
int | m_iBrackets
token_type | m_lastTok
char_type | m_cArgSep
| The character used for separating function arguments.

## Detailed Description

Token reader for the ParserBase class.

## Member Enumeration Documentation

enum mu::ParserTokenReader::ESynCodes`[private]`

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.

## Constructor & Destructor Documentation

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_pParent | Parent parser object of the token reader.

Referenced by Clone().

mu::ParserTokenReader::ParserTokenReader | ( | const ParserTokenReader & | a_Reader | ) | `[private]`

Copy constructor.

See also:
  Assign

Exceptions:

  | nothrow |

References Assign().

## Member Function Documentation

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 |

References ParserTokenReader().

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

References ReInit().

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

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

Returns:
  m_iPos

Exceptions:

  | nothrow |

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

Return a reference to the formula.

Returns:
  m_strFormula

Exceptions:

  | nothrow |

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.

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

References noASSIGN, noBC, noOPT, and noPOSTOP.

Referenced by SetFormula().

ParserTokenReader & mu::ParserTokenReader::operator= | ( | const ParserTokenReader & | a_Reader | ) | `[private]`

Assignement operator.

Self assignement will be suppressed otherwise Assign is called.

Parameters:

  | a_Reader | Object to copy to this token reader.

Exceptions:

  | nothrow |

References Assign().

void mu::ParserTokenReader::Assign | ( | const ParserTokenReader & | a_Reader | ) | `[private]`

Assign state of a token reader to this token reader.

Parameters:

  | a_Reader | Object from which the state should be copied.

Exceptions:

  | nothrow |

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().

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 |

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

bool mu::ParserTokenReader::IsBuiltIn | ( | token_type & | a_Tok | ) | `[private]`

Check if a built in operator or other token can be found.

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.

References mu::cmADD, mu::cmAND, mu::cmASSIGN, mu::cmBC, mu::cmBO, mu::cmDIV, mu::cmEND, mu::cmEQ, mu::cmFUNC, mu::cmGE, mu::cmGT, mu::cmLE, mu::cmLT, mu::cmMUL, mu::cmNEQ, mu::cmOR, mu::cmPOW, mu::cmSUB, mu::cmXOR, mu::ecINTERNAL_ERROR, mu::ecUNEXPECTED_OPERATOR, mu::ecUNEXPECTED_PARENS, Error(), mu::ParserToken< TBase, TString >::GetCode(), mu::ParserBase::GetOprtDef(), mu::ParserBase::HasBuiltInOprt(), IsInfixOpTok(), noARG_SEP, noASSIGN, noBC, noBO, noEND, noFUN, noINFIXOP, noOPT, noPOSTOP, noSTR, noVAL, noVAR, and mu::ParserToken< TBase, TString >::Set().

Referenced by ReadNextToken().

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

References mu::cmEND, mu::ecMISSING_PARENS, mu::ecUNEXPECTED_EOF, Error(), noEND, and mu::ParserToken< TBase, TString >::Set().

Referenced by ReadNextToken().

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.

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

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

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:

  | ParserException | if 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

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

Referenced by ReadNextToken().

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.

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

Referenced by ReadNextToken().

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.

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

Referenced by ReadNextToken().

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.

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

Referenced by ReadNextToken().

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 |

References mu::ecUNEXPECTED_VAR, Error(), ExtractToken(), mu::ParserToken< TBase, TString >::GetAsString(), m_fZero, noBO, noFUN, noINFIXOP, noPOSTOP, noVAL, noVAR, mu::ParserToken< TBase, TString >::SetVar(), and mu::ParserBase::ValidNameChars().

Referenced by ReadNextToken().

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 |

References mu::ecUNEXPECTED_STR, mu::ecUNTERMINATED_STRING, Error(), mu::ParserBase::m_vStringBuf, noANY, noARG_SEP, noBC, noEND, noOPT, and mu::ParserToken< TBase, TString >::SetString().

Referenced by ReadNextToken().

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:

  | ParserException | always throws thats the only purpose of this function.

References mu::ParserBase::Error().

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

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

- muParserTokenReader.h
- muParserTokenReader.cpp