コード例 #1
0
        //---------------------------------------------------------------------------

        /*  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;
        }
コード例 #2
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();
        }
コード例 #3
0
        //---------------------------------------------------------------------------

        /*  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());
        }