//--------------------------------------------------------------------------- /* Reset parser to string parsing mode and clear internal buffers. * * Resets the token reader. */ private void ReInit() { m_pParserEngine = ParseFromString; m_pTokenReader.ReInit(); m_rpn.Reset(); if (m_vStackBuffer != null) { Array.Clear(m_vStackBuffer, 0, m_vStackBuffer.Length); } m_nPos = 0; }
} // user defind variables. protected ParserXBase() { m_FunDef = new TokenMap(); m_PostOprtDef = new TokenMap(); m_InfixOprtDef = new TokenMap(); m_OprtDef = new SortedDictionary <string, IToken>(Comparer <string> .Create(Global.StringLengthComparer)); m_valDef = new TokenMap(); m_varDef = new TokenMap(); m_pParserEngine = ParseFromString; m_valDynVarShadow = new List <IValue>(); m_rpn = new RPN(); m_cache = new ValueCache(); // m_vStackBuffer = new List<IValue>(); InitTokenReader(); }
//--------------------------------------------------------------------------- /* One of the two main parse functions. * \sa ParseCmdCode(), ParseValue() * * Parse expression from input string. Perform syntax checking and create bytecode. * After parsing the string and creating the bytecode the function pointer #m_pParseFormula will be changed to the second parse routine the uses bytecode instead of string parsing. */ private IValue ParseFromString() { CreateRPN(); // Umsachalten RPN m_vStackBuffer = new IValue[m_rpn.GetRequiredStackSize()]; for (int i = 0; i < m_vStackBuffer.Length; ++i) { Value pValue = new Value(); pValue.BindToCache(m_cache); m_vStackBuffer[i] = pValue; } m_pParserEngine = ParseFromRPN; return(m_pParserEngine()); }