Exemplo n.º 1
0
        public void TestAdvancedTokeniser()
        {
            IdfTokeniser tks = new IdfTokeniser();

            tks.ParseTokens("one + two * three - andsoe(p1, p2, p3) + (1 + 5-6/7)");

            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Literal);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Operator);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Literal);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Operator);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Literal);
            
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Operator);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Function);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.LeftParen);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Literal);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.ParamSeperator);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Literal);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.ParamSeperator);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Literal);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.RightParen);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Operator);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.LeftParen);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Literal);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Operator);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Literal);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Operator);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Literal);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Operator);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Literal);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.RightParen);
            Assert.AreEqual(tks.PeekToken(), null);
            ;
        }
Exemplo n.º 2
0
        public void TestBasicTokeniser()
        {
            IdfTokeniser tks = new IdfTokeniser();

            tks.ParseTokens("one + two * three");

            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Literal);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Operator);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Literal);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Operator);
            Assert.AreEqual(tks.NextToken().Type, IdfTokenType.Literal);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Compile a IDF string
        /// </summary>
        /// <param name="str">The IDF string</param>
        /// <returns>The Compiled IDF</returns>
        public string Compile(string str)
        {
            //find equals and just send the right side to the tokeniser
            int eqIndex = str.IndexOf('=');
            _assignee = str.Substring(0, eqIndex).Trim();
            //TODO: check no white space inside assignee
            string right = str.Substring(eqIndex+1, str.Length - eqIndex-1);

            IdfTokeniser tk = new IdfTokeniser();
            tk.ParseTokens(right);

            //Check our tokenised equation for validity
            CheckSyntaxRules(tk);
            CheckFunctionRules(tk);

            //convert to RPN and return as compile IDF
            return GenerateOutput(ShuntingYard(tk));
        }