Example #1
0
 public override void ConstructIfClause(IfClause node)
 {
     this.Write("if ");
     this.ConstructInternal(node.Condition);
     this.WriteLine(" then");
     this.Indent( );
     this.ConstructInternal(node.Body);
     this.Outdent( );
 }
Example #2
0
        public Node IfStatement()
        {
            var result = new IfStatement();

            var ifClause = new IfClause()
            {
                AnchorToken = Expect(TokenCategory.IF)
            };

            ifClause.Add(Expression());
            Expect(TokenCategory.THEN);

            while (firstOfStatement.Contains(CurrentToken))
            {
                ifClause.Add(Statement());
            }

            result.Add(ifClause);

            while (CurrentToken == TokenCategory.ELSEIF)
            {
                var elseIfClause = new ElseIfClause()
                {
                    AnchorToken = Expect(TokenCategory.ELSEIF)
                };
                elseIfClause.Add(Expression());
                Expect(TokenCategory.THEN);

                while (firstOfStatement.Contains(CurrentToken))
                {
                    elseIfClause.Add(Statement());
                }

                result.Add(elseIfClause);
            }

            if (CurrentToken == TokenCategory.ELSE)
            {
                var elseClause = new ElseClause()
                {
                    AnchorToken = Expect(TokenCategory.ELSE)
                };

                while (firstOfStatement.Contains(CurrentToken))
                {
                    elseClause.Add(Statement());
                }

                result.Add(elseClause);
            }

            Expect(TokenCategory.END);
            Expect(TokenCategory.SEMICOLON);

            return(result);
        }
Example #3
0
        //-----------------------------------------------------------
        private string Visit(IfClause node, Table table, string nextClauseLabel)
        {
            string retString = Visit((dynamic)node[0], table);

            retString += "\t\tbrfalse " + nextClauseLabel + "\n";
            for (int i = 1; i < node.Count(); i++)
            {
                retString += Visit((dynamic)node[i], table);
            }

            return(retString);
        }
        //-----------------------------------------------------------
        private Type Visit(IfClause node, Table table)
        {
            Type condType = Visit((dynamic)node[0], table);

            if (condType != Type.BOOLEAN)
            {
                throw new SemanticError("If condition must be evaluated to a boolean value", node[0].AnchorToken);
            }

            for (var i = 1; i < node.Count(); i++)
            {
                Visit((dynamic)node[i], table);
            }

            return(Type.VOID);
        }
Example #5
0
 protected virtual ASTNode FoldIfClause(IfClause node, params Object[] args)
 {
     node.SetCondition(this.Fold(node.Condition));
     node.SetBody(( StatementList )this.Fold(node.Body));
     return(node);
 }
 protected virtual Object[] AnalyseIfClause(IfClause node, params Object[] args)
 {
     this.Analyse(node.Condition);
     this.Analyse(node.Body);
     return(null);
 }
 public abstract void ConstructIfClause(IfClause node);