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