Exemple #1
0
        /// <summary>
        /// Evaluate the sequence of expression using the given result of successed parsing.
        /// </summary>
        /// <param name="ParsingResult"> results of evaluating of each symbol in the rule after success parsing</param>
        /// <returns></returns>
        public object Evaluate(object[] ParsingResult, RuleExpressionEvaluator evaluator)
        {
            if (evaluator == null)
            {
                throw new ArgumentNullException("RuleExpressionEvaluator is null");
            }

            if (ParsingResult == null)
            {
                throw new ArgumentNullException("Parsing result is null");
            }
            //if (ParsingResult.Length == 0)
            //throw new ArgumentException("Parsing result is empty");
            evaluator.ParsingResult = ParsingResult;
            for (int i = 0; i < expressions.Length - 1; i++)
            {
                expressions[i].Evaluate(evaluator);
            }
            var res = expressions[expressions.Length - 1].Evaluate(evaluator);

            if (res == null || res.GetType() == typeof(void))
            {
                throw new ParserReturnValueException("The last expression has to return value");
            }
            evaluator.ParsingResult = null;
            return(res);
        }
 internal GrammarCreator(RuleExpressionEvaluator ev, AssembliesAccessWrapper wrapper, Dictionary <string, IToken> name_token_table)
     : this(ev, wrapper)
 {
     ExpressionEvaluator = ev ?? throw new ArgumentNullException($"Rule expression evaluator is not able to be null");
     foreach (var kvp in name_token_table)
     {
         RegisterTerminal(kvp.Key, kvp.Value);
     }
 }
 internal GrammarCreator(RuleExpressionEvaluator ev, AssembliesAccessWrapper wrapper, Dictionary <string, Terminal> name_terminal_table, Dictionary <IToken, Terminal> token_terminal_table)
     : this(ev, wrapper)
 {
     if ((name_terminal_table ?? throw new ArgumentNullException($"Table of name/terminal is null")).Count
         != (token_terminal_table ?? throw new ArgumentNullException($"Table token/terminal is null")).Count)
     {
         throw new GrammarException($"Problem with terminal registration");
     }
     NameTerminalTable  = name_terminal_table;
     TokenTerminalTable = token_terminal_table;
 }
Exemple #4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="start">Start Symbol</param>
 /// <param name="rules">Set of rules</param>
 /// <param name="ev">evaluator</param>
 public Grammar(NonTerminal start, Dictionary <NonTerminal, HashSet <Rule> > rules, RuleExpressionEvaluator ev)
 {
     if (rules == null)
     {
         throw new ArgumentNullException($"Set of rules is null");
     }
     if (rules.Count == 0)
     {
         throw new ArgumentException("Set of rules is empty");
     }
     Rules     = rules ?? throw new ArgumentNullException("Set of rules is null");
     Evaluator = ev ?? throw new ArgumentNullException("RuleExpressionEvaluator is null");
     if (!Rules.ContainsKey(start))
     {
         throw new GrammarException($"Starting non-terminal symbol is not defined in the grammar");
     }
     StartSymbol = start ?? throw new ArgumentNullException("Start symbol is null");
 }
 public override object Evaluate(RuleExpressionEvaluator evaluator)
 {
     return(evaluator.Evaluate(this));
 }
 public abstract object Evaluate(RuleExpressionEvaluator evaluator);
 internal GrammarCreator(RuleExpressionEvaluator evaluator, AssembliesAccessWrapper assemblies)
     : this()
 {
     ExpressionEvaluator = evaluator ?? throw new ArgumentNullException("Evaluator is null");
     Assemblies          = assemblies ?? throw new ArgumentNullException("Assemblies wrapper is null");
 }