public override void ConstructIfClause(IfClause node) { this.Write("if "); this.ConstructInternal(node.Condition); this.WriteLine(" then"); this.Indent( ); this.ConstructInternal(node.Body); this.Outdent( ); }
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); }
//----------------------------------------------------------- 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); }
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);