/// <summary>
        /// Call point to start the processing.
        /// </summary>
        protected override void Process()
        {
            MessageLogSentInvoker("===========================================");
            MessageLogSentInvoker(" Comenzando proceso de análisis sintáctico");
            MessageLogSentInvoker("===========================================");

            SyntacticalRule startRule =
                SyntacticalRulesLibrary.Instance.StartRule;


            OnMatcherMatching(this,
                              new MatchingArgs(SyntacticalRulesLibrary.Instance.StartRule));

            TokenSequence inputTokens = new TokenSequence(startTokens);

            parsingResult = startRule.Match(ref inputTokens, out output);

            if (inputTokens.Count > 0)
            {
                // Not all tokens were matched, so the parsing process
                // was unsuccessfull.
                parsingResult = false;
            }

            ProcessFinishedInvoker();
        }
Esempio n. 2
0
        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.'");
        }
Esempio n. 3
0
        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.'");
        }