NumeRe v1.1.4
NumeRe: Framework für Numerische Rechnungen
|
Token reader for the ParserBase class. More...
#include <muParserTokenReader.h>
Public Member Functions | |
ParserTokenReader (ParserBase *a_pParent) | |
Constructor. More... | |
ParserTokenReader * | Clone (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_type & | GetExpr () const |
Return a reference to the formula. More... | |
varmap_type & | GetUsedVar () |
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 , noIF = 1 << 12 , noELSE = 1 << 13 , sfSTART_OF_LINE = noOPT | noBC | noPOSTOP | noASSIGN | noIF | noELSE | noARG_SEP , noANY = ~0 } |
Syntax codes. More... | |
typedef ParserToken< value_type, string_type > | token_type |
Private Member Functions | |
ParserTokenReader (const ParserTokenReader &a_Reader) | |
Copy constructor. More... | |
ParserTokenReader & | operator= (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... | |
int | ExtractOperatorToken (string_type &a_sTok, int a_iPos) const |
Check Expression for the presence of a binary operator token. 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_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. More... | |
facfun_type | m_pFactory |
void * | m_pFactoryData |
std::list< identfun_type > | m_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... | |
Token reader for the ParserBase class.
Definition at line 54 of file muParserTokenReader.h.
|
private |
Definition at line 58 of file muParserTokenReader.h.
|
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.
Definition at line 87 of file muParserTokenReader.h.
mu::ParserTokenReader::ParserTokenReader | ( | ParserBase * | a_pParent | ) |
Constructor.
Create a Token reader and bind it to a parser object.
a_pParent | Parent parser object of the token reader. |
Definition at line 111 of file muParserTokenReader.cpp.
References m_pParser, and SetParent().
Referenced by Clone().
|
private |
Copy constructor.
nothrow |
Definition at line 52 of file muParserTokenReader.cpp.
References Assign().
void mu::ParserTokenReader::AddValIdent | ( | identfun_type | a_pCallback | ) |
Definition at line 161 of file muParserTokenReader.cpp.
References m_vIdentFun.
|
private |
Assign state of a token reader to this token reader.
a_Reader | Object from which the state should be copied. |
nothrow |
Definition at line 79 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().
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.
nothrow |
Definition at line 146 of file muParserTokenReader.cpp.
References ParserTokenReader().
|
private |
Create an error containing the parse error position.
This function will create an Parser Exception object containing the error text and its position.
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. |
ParserException | always throws thats the only purpose of this function. |
Definition at line 958 of file muParserTokenReader.cpp.
References mu::ParserBase::Error(), and m_pParser.
Referenced by IsArgSep(), IsBuiltIn(), IsEOF(), IsFunTok(), IsInfixOpTok(), IsString(), IsStrVarTok(), IsUndefVarTok(), IsValTok(), IsVarTok(), and ReadNextToken().
|
private |
Check Expression for the presence of a binary operator token.
Userdefined binary operator "++" gives inconsistent parsing result for the equations "a++b" and "a ++ b" if alphabetic characters are allowed in operator tokens. To avoid this this function checks specifically for operator tokens.
Definition at line 359 of file muParserTokenReader.cpp.
References ExtractToken(), m_pParser, m_strFormula, MUP_CHARS, and mu::ParserBase::ValidInfixOprtChars().
Referenced by IsOprt().
|
private |
Extract all characters that belong to a certain charset.
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. |
nothrow |
Definition at line 335 of file muParserTokenReader.cpp.
References m_strFormula.
Referenced by ExtractOperatorToken(), IsFunTok(), IsInfixOpTok(), IsPostOpTok(), IsStrVarTok(), IsUndefVarTok(), IsValTok(), IsVarTok(), and ReadNextToken().
char_type mu::ParserTokenReader::GetArgSep | ( | ) | const |
Definition at line 972 of file muParserTokenReader.cpp.
References m_cArgSep.
const string_type & mu::ParserTokenReader::GetExpr | ( | ) | const |
Return a reference to the formula.
nothrow |
Definition at line 196 of file muParserTokenReader.cpp.
References m_strFormula.
int mu::ParserTokenReader::GetPos | ( | ) | const |
Return the current position of the token reader in the formula string.
nothrow |
Definition at line 185 of file muParserTokenReader.cpp.
References m_iPos.
varmap_type & mu::ParserTokenReader::GetUsedVar | ( | ) |
Return a map containing the used variables only.
Definition at line 203 of file muParserTokenReader.cpp.
References m_UsedVar.
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 229 of file muParserTokenReader.cpp.
References m_bIgnoreUndefVar.
|
private |
Definition at line 490 of file muParserTokenReader.cpp.
References mu::cmARG_SEP, mu::ecUNEXPECTED_ARG_SEP, Error(), m_cArgSep, m_iPos, m_iSynFlags, m_strFormula, noARG_SEP, noASSIGN, noBC, noEND, noOPT, noPOSTOP, and mu::ParserToken< TBase, TString >::Set().
Referenced by ReadNextToken().
|
private |
Check if a built in operator or other token can be found.
a_Tok | [out] Operator token if one is found. This can either be a binary operator or an infix operator token. |
Definition at line 385 of file muParserTokenReader.cpp.
References mu::cmADD, mu::cmASSIGN, mu::cmBC, mu::cmBO, mu::cmDIV, mu::cmELSE, mu::cmEND, mu::cmEQ, mu::cmFUNC, mu::cmGE, mu::cmGT, mu::cmIF, mu::cmLAND, mu::cmLE, mu::cmLOR, mu::cmLT, mu::cmMUL, mu::cmNEQ, mu::cmPOW, mu::cmSUB, mu::ecINTERNAL_ERROR, mu::ecUNEXPECTED_CONDITIONAL, mu::ecUNEXPECTED_OPERATOR, mu::ecUNEXPECTED_PARENS, Error(), mu::ParserToken< TBase, TString >::GetCode(), mu::ParserBase::GetOprtDef(), mu::ParserBase::HasBuiltInOprt(), IsInfixOpTok(), m_iBrackets, m_iPos, m_iSynFlags, m_lastTok, m_pParser, m_strFormula, noARG_SEP, noASSIGN, noBC, noBO, noELSE, noEND, noFUN, noIF, noINFIXOP, noOPT, noPOSTOP, noSTR, noVAL, noVAR, and mu::ParserToken< TBase, TString >::Set().
Referenced by ReadNextToken().
|
private |
Check for End of Formula.
a_Tok | [out] If an eof is found the corresponding token will be stored there. |
nothrow |
Definition at line 521 of file muParserTokenReader.cpp.
References _nrT, mu::cmEND, mu::ecMISSING_PARENS, mu::ecUNEXPECTED_EOF, Error(), m_iBrackets, m_iPos, m_iSynFlags, m_strFormula, noEND, and mu::ParserToken< TBase, TString >::Set().
Referenced by ReadNextToken().
|
private |
Check whether the token at a given position is a function token.
a_Tok | [out] If a value token is found it will be placed here. |
ParserException | if Syntaxflags do not allow a function at a_iPos |
Definition at line 594 of file muParserTokenReader.cpp.
References mu::ecUNEXPECTED_FUN, Error(), ExtractToken(), mu::ParserToken< TBase, TString >::GetAsString(), m_iPos, m_iSynFlags, m_pFunDef, m_pParser, m_strFormula, noANY, noBO, noFUN, mu::ParserToken< TBase, TString >::Set(), and mu::ParserBase::ValidNameChars().
Referenced by ReadNextToken().
|
private |
Check if a string position contains a unary infix operator.
Definition at line 546 of file muParserTokenReader.cpp.
References mu::cmBC, mu::cmVAL, mu::cmVAR, mu::ecUNEXPECTED_OPERATOR, Error(), ExtractToken(), mu::ParserToken< TBase, TString >::GetAsString(), mu::ParserToken< TBase, TString >::GetCode(), m_iPos, m_iSynFlags, m_lastTok, 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().
|
private |
Check if a string position contains a binary operator.
a_Tok | [out] Operator token if one is found. This can either be a binary operator or an infix operator token. |
Definition at line 625 of file muParserTokenReader.cpp.
References ExtractOperatorToken(), mu::ParserBase::GetOprtDef(), mu::ParserBase::HasBuiltInOprt(), IsInfixOpTok(), m_iPos, m_iSynFlags, m_pOprtDef, m_pParser, m_strFormula, noARG_SEP, noASSIGN, noBC, noEND, noOPT, noPOSTOP, and mu::ParserToken< TBase, TString >::Set().
Referenced by ReadNextToken().
|
private |
Check if a string position contains a unary post value operator.
Definition at line 685 of file muParserTokenReader.cpp.
References ExtractToken(), m_iPos, m_iSynFlags, m_pParser, m_pPostOprtDef, noASSIGN, noBO, noFUN, noPOSTOP, noSTR, noVAL, noVAR, mu::ParserToken< TBase, TString >::Set(), and mu::ParserBase::ValidOprtChars().
Referenced by ReadNextToken().
|
private |
Check wheter a token at a given position is a string.
a_Tok | [out] If a variable token has been found it will be placed here. |
nothrow |
Definition at line 914 of file muParserTokenReader.cpp.
References _nrT, mu::ecUNEXPECTED_STR, mu::ecUNTERMINATED_STRING, Error(), m_iPos, m_iSynFlags, m_pParser, m_strFormula, mu::ParserBase::m_vStringBuf, noANY, noARG_SEP, noBC, noEND, noOPT, noSTR, and mu::ParserToken< TBase, TString >::SetString().
Referenced by ReadNextToken().
|
private |
Definition at line 827 of file muParserTokenReader.cpp.
References mu::ecINTERNAL_ERROR, mu::ecUNEXPECTED_VAR, Error(), ExtractToken(), m_iPos, m_iSynFlags, m_pParser, m_pStrVarDef, mu::ParserBase::m_vStringVarBuf, noANY, noARG_SEP, noBC, noEND, noOPT, noSTR, mu::ParserToken< TBase, TString >::SetString(), and mu::ParserBase::ValidNameChars().
Referenced by ReadNextToken().
|
private |
Check wheter a token at a given position is an undefined variable.
a_Tok | [out] If a variable tom_pParser->m_vStringBufken has been found it will be placed here. |
nothrow |
Definition at line 862 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().
|
private |
Check whether the token at a given position is a value token.
Value tokens are either values or constants.
a_Tok | [out] If a value token is found it will be placed here. |
Definition at line 737 of file muParserTokenReader.cpp.
References 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().
|
private |
Check wheter a token at a given position is a variable token.
a_Tok | [out] If a variable token has been found it will be placed here. |
Definition at line 791 of file muParserTokenReader.cpp.
References mu::ecUNEXPECTED_VAR, Error(), ExtractToken(), m_iPos, m_iSynFlags, m_pParser, m_pPostOprtDef, m_pVarDef, m_strFormula, m_UsedVar, noBO, noFUN, noINFIXOP, noSTR, noVAL, noVAR, mu::ParserBase::OnDetectVar(), mu::ParserToken< TBase, TString >::SetVar(), and mu::ParserBase::ValidNameChars().
Referenced by ReadNextToken().
|
private |
Assignement operator.
Self assignement will be suppressed otherwise Assign is called.
a_Reader | Object to copy to this token reader. |
nothrow |
Definition at line 65 of file muParserTokenReader.cpp.
References Assign().
ParserTokenReader::token_type mu::ParserTokenReader::ReadNextToken | ( | ) |
Read the next token from the string.
Definition at line 254 of file muParserTokenReader.cpp.
References mu::ecUNASSIGNABLE_TOKEN, Error(), ExtractToken(), mu::ParserToken< TBase, TString >::GetCode(), IsArgSep(), IsBuiltIn(), IsEOF(), IsFunTok(), IsInfixOpTok(), IsOprt(), IsPostOpTok(), IsString(), IsStrVarTok(), IsUndefVarTok(), IsValTok(), IsVarTok(), m_bIgnoreUndefVar, m_iPos, m_lastTok, m_pFactory, m_pParser, m_strFormula, SaveBeforeReturn(), and mu::ParserBase::ValidNameChars().
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.
nothrow |
Definition at line 243 of file muParserTokenReader.cpp.
References m_iBrackets, m_iPos, m_iSynFlags, m_lastTok, m_UsedVar, and sfSTART_OF_LINE.
Referenced by SetFormula().
|
private |
Definition at line 154 of file muParserTokenReader.cpp.
References m_lastTok.
Referenced by ReadNextToken().
void mu::ParserTokenReader::SetArgSep | ( | char_type | cArgSep | ) |
Definition at line 966 of file muParserTokenReader.cpp.
References m_cArgSep.
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.
Definition at line 214 of file muParserTokenReader.cpp.
References m_strFormula, and ReInit().
|
private |
Definition at line 314 of file muParserTokenReader.cpp.
References mu::ParserBase::m_ConstDef, mu::ParserBase::m_FunDef, mu::ParserBase::m_InfixOprtDef, mu::ParserBase::m_OprtDef, m_pConstDef, m_pFunDef, m_pInfixOprtDef, m_pOprtDef, mu::ParserBase::m_PostOprtDef, m_pParser, m_pPostOprtDef, m_pStrVarDef, m_pVarDef, mu::ParserBase::m_StrVarDef, and mu::ParserBase::m_VarDef.
Referenced by ParserTokenReader().
void mu::ParserTokenReader::SetVarCreator | ( | facfun_type | a_pFactory, |
void * | pUserData | ||
) |
Definition at line 173 of file muParserTokenReader.cpp.
References m_pFactory, and m_pFactoryData.
|
private |
Definition at line 139 of file muParserTokenReader.h.
Referenced by Assign(), IgnoreUndefVar(), and ReadNextToken().
|
private |
The character used for separating function arguments.
Definition at line 155 of file muParserTokenReader.h.
Referenced by Assign(), GetArgSep(), IsArgSep(), and SetArgSep().
|
private |
Dummy value of zero, referenced by undefined variables.
Definition at line 152 of file muParserTokenReader.h.
Referenced by IsUndefVarTok().
|
private |
Definition at line 153 of file muParserTokenReader.h.
Referenced by Assign(), IsBuiltIn(), IsEOF(), and ReInit().
|
private |
Definition at line 137 of file muParserTokenReader.h.
Referenced by Assign(), GetPos(), IsArgSep(), IsBuiltIn(), IsEOF(), IsFunTok(), IsInfixOpTok(), IsOprt(), IsPostOpTok(), IsString(), IsStrVarTok(), IsUndefVarTok(), IsValTok(), IsVarTok(), ReadNextToken(), and ReInit().
|
private |
Definition at line 138 of file muParserTokenReader.h.
Referenced by Assign(), IsArgSep(), IsBuiltIn(), IsEOF(), IsFunTok(), IsInfixOpTok(), IsOprt(), IsPostOpTok(), IsString(), IsStrVarTok(), IsUndefVarTok(), IsValTok(), IsVarTok(), and ReInit().
|
private |
Definition at line 154 of file muParserTokenReader.h.
Referenced by IsBuiltIn(), IsInfixOpTok(), ReadNextToken(), ReInit(), and SaveBeforeReturn().
|
private |
Definition at line 145 of file muParserTokenReader.h.
Referenced by Assign(), IsValTok(), and SetParent().
|
private |
Definition at line 148 of file muParserTokenReader.h.
Referenced by Assign(), IsUndefVarTok(), ReadNextToken(), and SetVarCreator().
|
private |
Definition at line 149 of file muParserTokenReader.h.
Referenced by Assign(), IsUndefVarTok(), and SetVarCreator().
|
private |
Definition at line 141 of file muParserTokenReader.h.
Referenced by Assign(), IsFunTok(), and SetParent().
|
private |
Definition at line 143 of file muParserTokenReader.h.
Referenced by Assign(), IsInfixOpTok(), and SetParent().
|
private |
Definition at line 144 of file muParserTokenReader.h.
Referenced by Assign(), IsOprt(), and SetParent().
|
private |
Definition at line 135 of file muParserTokenReader.h.
Referenced by Assign(), Error(), ExtractOperatorToken(), IsBuiltIn(), IsFunTok(), IsInfixOpTok(), IsOprt(), IsPostOpTok(), IsString(), IsStrVarTok(), IsUndefVarTok(), IsValTok(), IsVarTok(), ParserTokenReader(), ReadNextToken(), and SetParent().
|
private |
Definition at line 142 of file muParserTokenReader.h.
Referenced by Assign(), IsPostOpTok(), IsVarTok(), and SetParent().
|
private |
Definition at line 146 of file muParserTokenReader.h.
Referenced by Assign(), IsStrVarTok(), and SetParent().
|
private |
The only non const pointer to parser internals.
Definition at line 147 of file muParserTokenReader.h.
Referenced by Assign(), IsVarTok(), and SetParent().
|
private |
Definition at line 136 of file muParserTokenReader.h.
Referenced by Assign(), ExtractOperatorToken(), ExtractToken(), GetExpr(), IsArgSep(), IsBuiltIn(), IsEOF(), IsFunTok(), IsOprt(), IsString(), IsValTok(), IsVarTok(), ReadNextToken(), and SetFormula().
|
private |
Definition at line 151 of file muParserTokenReader.h.
Referenced by Assign(), GetUsedVar(), IsUndefVarTok(), IsVarTok(), and ReInit().
|
private |
Value token identification function.
Definition at line 150 of file muParserTokenReader.h.
Referenced by AddValIdent(), Assign(), and IsValTok().