예제 #1
0
 public void Visit(FunctionalExpression s)
 {
     foreach (var arg in s._arguments)
     {
         arg.Accept(this);
     }
 }
예제 #2
0
        public void AddIntegersFunctionalExpression()
        {
            var expr = new FunctionalExpression(new AddIntegersFunction(), new IExpression[] { new IntegerExpression(1), new IntegerExpression(2) });

            Assert.AreEqual(new IntegerExpression(3), expr.Reduce());
            Assert.AreSame(IntegerType.Instance, expr.Type);
        }
예제 #3
0
        public void MatchWithFunctionalExpression()
        {
            var expr  = new FunctionalExpression(new AddIntegersFunction(), new IExpression[] { new IntegerExpression(1), new IntegerExpression(2) });
            var expr1 = new FunctionalExpression(new AddIntegersFunction(), new IExpression[] { new IntegerExpression(1), new IntegerExpression(2) });
            var expr2 = new FunctionalExpression(new SubtractIntegersFunction(), new IExpression[] { new IntegerExpression(1), new IntegerExpression(2) });
            var expr3 = new FunctionalExpression(new AddIntegersFunction(), new IExpression[] { new IntegerExpression(2), new IntegerExpression(3) });

            Assert.IsTrue(expr.Match(expr, null));
            Assert.IsTrue(expr.Match(expr1, null));
            Assert.IsFalse(expr.Match(expr2, null));
            Assert.IsFalse(expr.Match(expr3, null));
        }
예제 #4
0
        private FunctionalExpression Function()
        {
            var name = Consume(TokenType.WORD).Text;

            Consume(TokenType.LPAREN);
            var function = new FunctionalExpression(name);

            while (!Match(TokenType.RPAREN))
            {
                function.AddArgument(Expression());
                Match(TokenType.COMMA);
            }
            return(function);
        }
예제 #5
0
        public void MatchVariableInFunctionalExpression()
        {
            var one   = new IntegerExpression(1);
            var two   = new IntegerExpression(2);
            var expr  = new FunctionalExpression(new AddIntegersFunction(), new IExpression[] { new NameExpression("a"), new NameExpression("b") });
            var expr1 = new FunctionalExpression(new AddIntegersFunction(), new IExpression[] { one, two });

            Context <IExpression> ctx = new Context <IExpression>();

            Assert.IsTrue(expr.Match(expr1, ctx));

            Assert.AreSame(one, ctx.GetValue("a"));
            Assert.AreSame(two, ctx.GetValue("b"));
        }
예제 #6
0
파일: Parser.cs 프로젝트: MrxLoicx/LLang
        private FunctionalExpression function()
        {
            string name = consume(TokenType.WORD).getText();

            consume(TokenType.LPAREN);
            FunctionalExpression function = new FunctionalExpression(name);

            // добавление аргументов для функции
            while (!match(TokenType.RPAREN))
            {
                function.AddArgument(expression());
                match(TokenType.COMMA);
            }
            return(function);
        }
예제 #7
0
 public FunctionStatement(FunctionalExpression function)
 {
     _function = function;
 }