public void TestString() { var expression = new PlusExpression(Mock.Of <IExpression>(e => e.Evaluate(It.IsAny <IDictionary <string, object> >()) == (object)"12")); Assert.AreEqual(12M, expression.Evaluate(null)); }
public void TestInvalid() { var expression = new PlusExpression(Mock.Of <IExpression>(e => e.Evaluate(It.IsAny <IDictionary <string, object> >()) == (object)DateTime.Now)); Assert.IsNull(expression.Evaluate(null)); }
private Expression Suffix(INode node) { if (node.Name == "quantified") { Debug.Assert(node.Count == 2); var expression = Primary(node[0]); switch (node[1].Name) { case "?": return(OptionalExpression.From(node, expression)); case "*": return(StarExpression.From(node, expression)); case "+": return(PlusExpression.From(node, expression)); default: throw new NotImplementedException(); } } return(Primary(node)); }
protected override void VisitPlusExpression(PlusExpression expression) { base.VisitPlusExpression(expression); if (expression.Expression.Attr.IsNullable) { Results.AddError(new MessageError(MessageCode.NullableManyContent, expression)); } }
public void Visit(PlusExpression exp) { exp.Op0.Accept(this); exp.Op1.Accept(this); int b = stack.Pop(); int a = stack.Pop(); stack.Push(checked(a + b)); }
public object Visit(PlusExpression exp) { if (d) { return(checked ((double)exp.Op0.Accept(this) + (double)exp.Op1.Accept(this))); } else { return(checked ((int)exp.Op0.Accept(this) + (int)exp.Op1.Accept(this))); } }
protected override void VisitPlusExpression(PlusExpression plus) { CS.IndentInOut( "PlusExpression", () => { using var start = Locals.Use("start"); using var nodes = Locals.Use("nodes"); CS.Ln($"{start} = {Cfg.CurName};"); CS.Ln($"{nodes} = new List<INode>(10);"); Locals.PeekPrep(Writer); CS.ForEver( () => { VisitExpression(plus.Expression); CS.If( $"{Locals.Result}.IsSuccess", () => { CS.Ln($"{Cfg.CurName} = {Locals.Result}.Next;"); CS.Ln($"{nodes}.AddRange({Locals.Result}.Nodes);"); }, () => { CS.Ln("break;"); }); }); CS.If( $"{nodes}.Count > 0", () => { using var location = Locals.Use("location"); using var node = Locals.Use("node"); CS.Ln($"{location} = Location.From({start}, {Cfg.CurName});"); CS.Ln($"{node} = NodeList.From({location}, NodeSymbols.Plus, {nodes}.ToArray());"); CS.Ln($"{Locals.Result} = Result.Success({location}, {Cfg.CurName}, {node});"); }, () => { CS.Ln($"{Locals.Result} = Result.Fail({start});"); }); }); }
private static Expression Expression(INode node) { switch (node.Name) { case "sequence": return(Sequence(node)); case "choice": return(Choice(node)); case "prefix.drop": return(DropExpression.From(node[0], Expression(node[0]))); case "prefix.lift": return(LiftExpression.From(node[0], Expression(node[0]))); case "prefix.fuse": return(FuseExpression.From(node[0], Expression(node[0]))); case "prefix.not": return(NotExpression.From(node[0], Expression(node[0]))); case "suffix.zero-or-more": return(StarExpression.From(node[0], Expression(node[0]))); case "suffix.one-or-more": return(PlusExpression.From(node[0], Expression(node[0]))); case "suffix.zero-or-one": return(OptionalExpression.From(node[0], Expression(node[0]))); case "inline": return(InlineExpression.From(node[0], Tree.Rule.From(Identifier(node[0]), Expression(node[1])))); case "identifier": return(NameExpression.From(node, Identifier(node))); case "any": return(AnyExpression.From(node)); case "verbatim-string": return(StringLiteralExpression.From(node, ((ILeaf)node).Value)); case "character-class": return(Class(node)); case "string": return(String(node)); default: throw new NotImplementedException(); } }
protected override void VisitPlusExpression(PlusExpression expression) { MaybeParent(expression.Expression is PrefixExpression, expression.Expression); Writer.Write($"{OpSymbols.Plus}"); }
public SingleExpression(TextReader reader) { while (reader.Peek() != -1) { char c = (char)reader.Peek(); if (c == '(') { reader.Read(); Expression = new SingleExpression(reader); if ((char)reader.Read() != ')') { throw new Exception("Expected )"); } } else if (c == ')') { return; } else if (c == '[') { reader.Read(); Expression = new RangeExpression(reader); if ((char)reader.Read() != ']') { throw new Exception("Expected ]"); } } else if (c == '{') { reader.Read(); Expression = new RepeatExpression(reader) { Expression = Expression }; if ((char)reader.Read() != '}') { throw new Exception("Expected }"); } } else if (c == '|') { reader.Read(); Expression = new OrExpression { Left = Expression, Right = new SingleExpression(reader) }; } else if (c == '.') { reader.Read(); Expression = new ConcatExpression { Left = Expression, Right = new SingleExpression(reader).Expression }; } else if (c == '*') { reader.Read(); Expression = new StarExpression { Expression = Expression }; } else if (c == '+') { reader.Read(); Expression = new PlusExpression { Expression = Expression }; } else { throw new Exception("Unexpected " + c); } } }
private string GetExpression(PlusExpression expression, ref List<OleDbParameter> parameters) { return " ( " + GetExpressionDispatch(expression.Children[0], ref parameters) + " + " + GetExpressionDispatch(expression.Children[1], ref parameters) + " ) "; }
protected override void VisitPlusExpression(PlusExpression plus) { VisitExpression(plus.Expression); Push(new Plus(Pop())); }
public SingleExpression(TextReader reader) { while (reader.Peek() != -1) { char c = (char)reader.Peek(); if (c == '(') { reader.Read(); Expression = new SingleExpression(reader); if ((char)reader.Read() != ')') throw new Exception("Expected )"); } else if (c == ')') { return; } else if (c == '[') { reader.Read(); Expression = new RangeExpression(reader); if ((char)reader.Read() != ']') throw new Exception("Expected ]"); } else if (c == '{') { reader.Read(); Expression = new RepeatExpression(reader) { Expression = Expression }; if ((char)reader.Read() != '}') throw new Exception("Expected }"); } else if (c == '|') { reader.Read(); Expression = new OrExpression { Left = Expression, Right = new SingleExpression(reader) }; } else if (c == '.') { reader.Read(); Expression = new ConcatExpression { Left = Expression, Right = new SingleExpression(reader).Expression }; } else if (c == '*') { reader.Read(); Expression = new StarExpression { Expression = Expression }; } else if (c == '+') { reader.Read(); Expression = new PlusExpression { Expression = Expression }; } else { throw new Exception("Unexpected " + c); } } }
protected override void VisitPlusExpression(PlusExpression expression) { base.VisitPlusExpression(expression); SetNullable(expression, expression.Expression.Attr.IsNullable); }
private string GetExpression(PlusExpression expression, ref List <OleDbParameter> parameters) { return(" ( " + GetExpressionDispatch(expression.Children[0], ref parameters) + " + " + GetExpressionDispatch(expression.Children[1], ref parameters) + " ) "); }