コード例 #1
0
ファイル: Resolver.cs プロジェクト: sula0/Lox
        protected override object MatchAssignExpr(AssignmentExpr expr)
        {
            Resolve(expr.Value);

            ResolveLocal(expr, expr.Name);

            return(null);
        }
コード例 #2
0
        public ValueType Visit(AssignmentExpr expr, Scope scope)
        {
            if (!(expr.Left is IdentifierExpr))
            {
                throw new TypeCheckException("Assignement target must be an identifier");
            }

            return(expr.Right.Accept(this, scope));
        }
コード例 #3
0
            public void AssignmentTest()
            {
                var target = new TypeCheckingVisitor();

                var expr = new AssignmentExpr(new IdentifierExpr("a"), new ConstantExpr(1));

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(ValueType.Int, actual);
            }
コード例 #4
0
        public override void Visit(AssignmentExpr expr)
        {
            // If the expression does not reference itself, then we're cool.
            var refs = VariableReferenceFinder.GetReferencedVariables(expr.Value);

            if (refs.All(r => r != expr.Name))
            {
                _definedVariables.Add(expr.Name);
            }
        }
コード例 #5
0
            public void VisitMassEnergyEquavalenceExpressionTree()
            {
                var target = new PrintVisitor();

                var e   = new IdentifierExpr("e");
                var m   = new IdentifierExpr("m");
                var c   = new IdentifierExpr("C");
                var two = new ConstantExpr(2);

                var expression = new AssignmentExpr(e, new MultExpr(m, new PowExpr(c, two)));

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("e=m*C^2", actual);
            }
コード例 #6
0
        public Value Visit(AssignmentExpr expr, Scope scope)
        {
            var name     = expr.LValueExpression.Name;
            var variable = scope.FindIdentifier(name);

            if (!variable.IsDefined)
            {
                throw new UndefinedIdentifierException("Identifier is not defined" + expr.LValueExpression.Name);
            }

            var rvalue = expr.Right.Accept(this, scope);

            // HACK : Need to rationalise the type checking.
            // It's either in here or it's not!
            //if(variable.Value.Type != rvalue.Type)
            //   throw new InvalidCastException();

            scope.AssignIdentifierValue(name, rvalue);

            return(rvalue);
        }
コード例 #7
0
            public void InvalidLValueAssignmentTest()
            {
                var target = new TypeCheckingVisitor();

                var expr = new AssignmentExpr(new ConstantExpr("a"), new ConstantExpr(1));

                target.Visit(expr, scope);
            }
コード例 #8
0
            public void AssignmentTest()
            {
                var target = new TypeCheckingVisitor();

                var expr = new AssignmentExpr(new IdentifierExpr("a"), new ConstantExpr(1));

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(ValueType.Int, actual);
            }
コード例 #9
0
 public string Visit(AssignmentExpr expr, Scope scope)
 {
     return(expr.Left.Accept(this, scope) + "=" + expr.Right.Accept(this, scope));
 }
コード例 #10
0
            public void VisitMassEnergyEquavalenceExpressionTree()
            {
                var target = new PrintVisitor();

                var e = new IdentifierExpr("e");
                var m = new IdentifierExpr("m");
                var c = new IdentifierExpr("C");
                var two = new ConstantExpr(2);

                var expression = new AssignmentExpr(e, new MultExpr(m, new PowExpr(c, two)));

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("e=m*C^2", actual);
            }
コード例 #11
0
ファイル: Matcher.cs プロジェクト: sula0/Lox
 protected abstract object MatchAssignExpr(AssignmentExpr assignmentExpr);
コード例 #12
0
ファイル: ExprVisitor.cs プロジェクト: jimdeselms/bifoql
 public virtual void Visit(AssignmentExpr expr)
 {
 }
コード例 #13
0
 public override void Visit(AssignmentExpr expr) => _needsAsync = true;