コード例 #1
0
ファイル: Segmentizer.cs プロジェクト: qrakhen/sqript
 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!!");
 }
コード例 #2
0
 public void append(IfElseSegment next)
 {
     this.next = next;
 }