Пример #1
0
 private KecaknoahUnaryExpressionAstNode ParseUnaryExpression(Queue<KecaknoahToken> tokens)
 {
     var ut = tokens.Peek();
     switch (ut.Type)
     {
         case KecaknoahTokenType.Minus:
             tokens.Dequeue();
             var mue = new KecaknoahUnaryExpressionAstNode();
             mue.Target = ParsePrimaryExpression(tokens);
             mue.ExpressionType = KecaknoahOperatorType.Minus;
             return mue;
         case KecaknoahTokenType.Not:
             tokens.Dequeue();
             var nue = new KecaknoahUnaryExpressionAstNode();
             nue.Target = ParsePrimaryExpression(tokens);
             nue.ExpressionType = KecaknoahOperatorType.Not;
             return nue;
         case KecaknoahTokenType.Increment:
             tokens.Dequeue();
             var iue = new KecaknoahUnaryExpressionAstNode();
             iue.Target = ParsePrimaryExpression(tokens);
             iue.ExpressionType = KecaknoahOperatorType.Increment;
             return iue;
         case KecaknoahTokenType.Decrement:
             tokens.Dequeue();
             var due = new KecaknoahUnaryExpressionAstNode();
             due.Target = ParsePrimaryExpression(tokens);
             due.ExpressionType = KecaknoahOperatorType.Decrement;
             return due;
         case KecaknoahTokenType.Plus:
             tokens.Dequeue();
             goto default;
         default:
             var pe = ParsePrimaryExpression(tokens);
             return pe;
     }
 }
Пример #2
0
 internal IList<KecaknoahILCode> PrecompilePrefixIncrement(KecaknoahUnaryExpressionAstNode node)
 {
     var result = new List<KecaknoahILCode>();
     result.AddRange(PrecompileExpression(node.Target));
     result.Add(new KecaknoahILCode { Type = KecaknoahILCodeType.PushInteger, IntegerValue = 1 });
     result.Add(new KecaknoahILCode { Type = KecaknoahILCodeType.PlusAssign });
     return result;
 }