protected Segment parseCondition(Qontext context, Keyword keyword) { if (keyword == Keyword.CONDITION_IF) { Token[] premise = readBody(); Segment[] body = parse(context, readBody()); Log.spam("creating new ifElseSegment"); IfElseSegment ifElse = new IfElseSegment(body, premise); if (peek().check(ValueType.Keyword) && peek().getValue <Keyword>() == Keyword.CONDITION_ELSE) { digest(); if (peek().check(ValueType.Keyword) && peek().check(Keyword.CONDITION_IF)) { digest(); Log.spam("appending else if (...) continuation..."); ifElse.append((IfElseSegment)parseCondition(context, keyword)); } else { Log.spam("appending premise-less else continuation..."); ifElse.append(new IfElseSegment(parse(context, readBody()), new Token[0])); } } return(ifElse); } else if (keyword == Keyword.CONDITION_LOOP) { if (peek().check(ValueType.Struqture) && peek().check(Struqture.Call[OPEN])) { Token[] premise = readBody(); Segment[] body = parse(context, readBody()); LoopSegment loop = new LoopSegment(body, LoopSegment.HEAD, premise); return(loop); } else if (peek().check(ValueType.Struqture) && peek().check(Struqture.Context[OPEN])) { Segment[] body = parse(context, readBody()); Token[] premise = readBody(); LoopSegment loop = new LoopSegment(body, LoopSegment.FOOT, premise); return(loop); } else { new OperationException("loop condition expected '(' or '{' to start premise or body - got '" + peek().str() + "' instead."); } } throw new OperationException("wanted to parse condition, but could not. debug me!!"); }
public void append(IfElseSegment next) { this.next = next; }