public void RepeaterTestCase()
		{
			TokenSequence sequence= new TokenSequence();
			
			Token t = new Token("NUMBER");
			t.Text="200.9";
			sequence.Append(t);
			
			t = new Token("ADD");
			t.Text="+";
			sequence.Append(t);
			
			t = new Token("NUMBER");
			t.Text="14";
			sequence.Append(t);
			
			t = new Token("ADD");
			t.Text="+";
			sequence.Append(t);
			
			t = new Token("NUMBER");
			t.Text="28";
			sequence.Append(t);
			
			SyntacticalRule rule = new SyntacticalRule("formula");
			
			SyntacticalExpression exp = new SyntacticalExpression();
			exp.FormatString="{0}{1}";
			
			ExpressionTokenItem eti = new ExpressionTokenItem();
			eti.TokenType = "NUMBER";
			exp.Items.Add(eti);
			
			ExpressionGroupItem group = new ExpressionGroupItem();
			group.Modifier = ExpressionItemModifier.RepeatingNonCompulsory;
			
			eti = new ExpressionTokenItem();
			eti.TokenType = "ADD";
			group.ChildrenItems.Add(eti);
			
			eti = new ExpressionTokenItem();
			eti.TokenType = "NUMBER";
			group.ChildrenItems.Add(eti);
			
			
			group.FormatString=" + {1}";
			exp.Items.Add(group);
			rule.Expressions.Add(exp);
			
			string output;
			bool res = rule.Match(ref sequence, out output);
			
			Assert.IsTrue(res, "Matching wasn't succesfull");
			Assert.AreEqual("200.9 + 14 + 28", output, "Output isn't correct.'");
		}
        protected override bool MatchSequence(ref TokenSequence sequence, out string output)
        {
            // The actual matching is done by the rule.
            SyntacticalRule ruleCalled =
                SyntacticalRulesLibrary.Instance[ruleName];

            bool res = ruleCalled.Match(ref sequence, out output);

            if (res)
            {
                output = String.Format(formatString, output);
            }

            return(res);
        }
		/// <summary>
		/// Adds a rule to the manager
		/// </summary>
		/// <param name="rule">
		/// The <see cref="SyntacticalRule"/> that will be managed.
		/// </param>
		public void AddRule(SyntacticalRule rule)
		{
			this.rules.Add(rule.Name, rule);
		}
		public void SumAndMultTestCase()
		{
			TokenSequence sequence= new TokenSequence();
			
			Token t = new Token("NUMBER");
			t.Text="200.9";
			sequence.Append(t);
			
			t = new Token("ADD");
			t.Text="+";
			sequence.Append(t);
			
			t = new Token("NUMBER");
			t.Text="28";
			sequence.Append(t);
			
			t = new Token("MULT");
			t.Text="x";
			sequence.Append(t);
			
			t = new Token("NUMBER");
			t.Text="14";
			sequence.Append(t);			
			
			SyntacticalRulesLibrary.Instance.ClearRules();
			
			SyntacticalRule rule = new SyntacticalRule("multiplicacion");
			SyntacticalRulesLibrary.Instance.AddRule(rule);
			
			SyntacticalExpression exp = new SyntacticalExpression();
			exp.FormatString="{0}{1}";
			
			ExpressionTokenItem eti = new ExpressionTokenItem();
			eti.TokenType = "NUMBER";
			exp.Items.Add(eti);
			
			ExpressionGroupItem group = new ExpressionGroupItem();
			group.Modifier = ExpressionItemModifier.RepeatingNonCompulsory;
			
			eti = new ExpressionTokenItem();
			eti.TokenType = "MULT";
			group.ChildrenItems.Add(eti);
			
			eti = new ExpressionTokenItem();
			eti.TokenType = "NUMBER";
			group.ChildrenItems.Add(eti);
			
			group.FormatString=" x {1}";
			exp.Items.Add(group);
			rule.Expressions.Add(exp);
			
			rule = new SyntacticalRule("formula");
			SyntacticalRulesLibrary.Instance.AddRule(rule);
			
			exp = new SyntacticalExpression();
			exp.FormatString="{0}{1}";
			
			ExpressionRuleCallItem esi = new ExpressionRuleCallItem();
			esi.RuleName = "multiplicacion";
			exp.Items.Add(esi);
			
			group = new ExpressionGroupItem();
			group.Modifier = ExpressionItemModifier.RepeatingNonCompulsory;
			
			eti = new ExpressionTokenItem();
			eti.TokenType = "ADD";
			group.ChildrenItems.Add(eti);
			
			esi = new ExpressionRuleCallItem();
			esi.RuleName = "multiplicacion";
			group.ChildrenItems.Add(esi);
			
			
			group.FormatString=" + {1}";
			exp.Items.Add(group);
			rule.Expressions.Add(exp);
			
			
			
			string output;
			bool res = rule.Match(ref sequence, out output);
			
			Assert.IsTrue(res, "Matching wasn't succesfull");
			Assert.AreEqual("200.9 + 28 x 14", output, "Output isn't correct.'");
		}
 /// <summary>
 /// Adds a rule to the manager
 /// </summary>
 /// <param name="rule">
 /// The <see cref="SyntacticalRule"/> that will be managed.
 /// </param>
 public void AddRule(SyntacticalRule rule)
 {
     this.rules.Add(rule.Name, rule);
 }
Ejemplo n.º 6
0
		public SyntacticalRule(SyntacticalRule rule)
		{
			this.expressions =rule.expressions;
			this.ruleName = rule.ruleName;
		}
		/// <summary>
		/// Adds a rule to the rule list.
		/// </summary>
		/// <param name="rule">
		/// A <see cref="SyntacticalRule"/>
		/// </param>
		private void AddRule(SyntacticalRule rule)
		{
			string [] parts = rule.ToString().Split(':');
			
			TreeIter iter = synRulesModel.AppendValues(parts[0]+" :",
			                                           parts[1],
			                                           rule);
			
			synRulesTree.Selection.SelectIter(iter);
			
			
			synRulesTree.ScrollToCell(synRulesModel.GetPath(iter), 
			                          synRulesTree.Columns[0],
			                          true,0.5f,0);
		}
Ejemplo n.º 8
0
 public SyntacticalRule(SyntacticalRule rule)
 {
     this.expressions = rule.expressions;
     this.ruleName    = rule.ruleName;
 }