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