Пример #1
0
 AssignNode MakeDictAssign(DictGetNode n, ExprNode n1, Lexer.TokenType op, Lexer.Position pos)
 {
     if (op == Lexer.TokenType.TOK_ASSIGN)
     {
         return(new AsgDictNode(n.Left, n.Right, n1, pos));
     }
     switch (op)
     {
     case Lexer.TokenType.TOK_PLUS:
     case Lexer.TokenType.TOK_MINUS:
     case Lexer.TokenType.TOK_MUL:
     case Lexer.TokenType.TOK_DIV:
     case Lexer.TokenType.TOK_MOD:
     case Lexer.TokenType.TOK_SHL:
     case Lexer.TokenType.TOK_SHR:
     //case Lexer.TokenType.TOK_NOTAR:
     case Lexer.TokenType.TOK_AND:
     case Lexer.TokenType.TOK_OR:
     case Lexer.TokenType.TOK_XOR:
     case Lexer.TokenType.TOK_PLUSPLUS:
     case Lexer.TokenType.TOK_MINUSMINUS:
     case Lexer.TokenType.FTOK_PLUSPLUS_PREF:
     case Lexer.TokenType.FTOK_MINUSMINUS_PREF:
         return(new AsgArifmDictNode(n.Left, n.Right, n1, op, pos));
     }
     throw new ParserException("Can't assign to " + n.OpType, pos);
 }
Пример #2
0
            public GrammarDefinition(Lexer.TokenType tType, Symbol evalTo, params Symbol[] accepts)
            {
                Accepts = new List <Symbol>();
                if (Accepts.Count > 0)
                {
                    Accepts.AddRange(accepts);
                }

                TokenType   = tType;
                EvaluatesTo = evalTo;
            }
Пример #3
0
 public bool MoveIfPeekEquals(Lexer.TokenType tokenType)
 {
     if (Peek().Name.Equals(tokenType))
     {
         Move();
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #4
0
 AssignNode MakeAssign(ExprNode n, ExprNode n1, Lexer.TokenType op, Lexer.Position pos)
 {
     if (n.OpType == ExprType.Ident)
     {
         return(MakeIdentAssign(n as IdentNode, n1, op, pos));
     }
     else if (n.OpType == ExprType.DictGet)
     {
         return(MakeDictAssign(n as DictGetNode, n1, op, pos));
     }
     throw new ParserException("Can't assign to " + n.OpType, pos);
 }
Пример #5
0
        public bool Parse()
        {
            token = lexer.GetNextToken();
            if (delayinc)
            {
                depth++;
                delayinc = false;
            }
            if (token == Lexer.TokenType.EOF)
            {
                depth = 0;
                return(false);
            }

            /*
             * Console.WriteLine("Token: " + token.ToString() + " - " +
             *      lexer.TokenString);
             */
            switch (token)
            {
            case Lexer.TokenType.CLOSE_PAREN:
                if (depth == 0)
                {
                    throw new Exception("Parse Error: unexpected )");
                }
                depth--;
                type = LispType.END_LIST;
                break;

            case Lexer.TokenType.OPEN_PAREN:
                type     = LispType.START_LIST;
                delayinc = true;
                break;

            case Lexer.TokenType.SYMBOL:
                type = LispType.SYMBOL;
                break;

            case Lexer.TokenType.STRING:
                type = LispType.STRING;
                break;

            case Lexer.TokenType.TRUE:
                type = LispType.BOOLEAN;
                break;

            case Lexer.TokenType.INTEGER:
                type = LispType.INTEGER;
                break;
            }
            return(true);
        }
Пример #6
0
        public bool Parse()
        {
            token = lexer.GetNextToken();
            if(delayinc) {
            depth++;
            delayinc = false;
            }
            if(token == Lexer.TokenType.EOF) {
            depth = 0;
            return false;
            }

            /*
            Console.WriteLine("Token: " + token.ToString() + " - " +
                lexer.TokenString);
            */
            switch(token) {
            case Lexer.TokenType.CLOSE_PAREN:
                if(depth == 0)
                    throw new Exception("Parse Error: unexpected )");
                depth--;
                type = LispType.END_LIST;
                break;
            case Lexer.TokenType.OPEN_PAREN:
                type = LispType.START_LIST;
                delayinc = true;
                break;
            case Lexer.TokenType.SYMBOL:
                type = LispType.SYMBOL;
                break;
            case Lexer.TokenType.STRING:
                type = LispType.STRING;
                break;
            case Lexer.TokenType.TRUE:
                type = LispType.BOOLEAN;
                break;
            case Lexer.TokenType.INTEGER:
                type = LispType.INTEGER;
                break;
            }
            return true;
        }
Пример #7
0
        ArifmOperation GetOperation(Lexer.TokenType op)
        {
            switch (op)
            {
            case Lexer.TokenType.TOK_PLUS: return(new Addition());

            case Lexer.TokenType.TOK_MINUS: return(new Subtraction());

            case Lexer.TokenType.TOK_MUL: return(new Multiplication());

            case Lexer.TokenType.TOK_DIV: return(new Division());

            case Lexer.TokenType.TOK_MOD: return(new Modulo());

            case Lexer.TokenType.TOK_SHL: return(new Shl());

            case Lexer.TokenType.TOK_SHR: return(new Shr());

            case Lexer.TokenType.TOK_AND: return(new And());

            case Lexer.TokenType.TOK_OR: return(new Or());

            case Lexer.TokenType.TOK_XOR: return(new Xor());

            case Lexer.TokenType.TOK_LOGAND: return(new LogAnd());

            case Lexer.TokenType.TOK_LOGOR: return(new LogOr());

            case Lexer.TokenType.TOK_LESS: return(new Below());

            case Lexer.TokenType.TOK_LESSEQ: return(new BelowEq());

            case Lexer.TokenType.TOK_GREATER: return(new Above());

            case Lexer.TokenType.TOK_GREATEQ: return(new AboveEq());

            case Lexer.TokenType.TOK_EQUAL: return(new Equal());

            case Lexer.TokenType.TOK_NOTEQ: return(new NEqual());
            }
            return(null);
        }
Пример #8
0
        ArifmOperation GetUnaryOperation(Lexer.TokenType op)
        {
            switch (op)
            {
            case Lexer.TokenType.TOK_PLUS: return(new Positive());

            case Lexer.TokenType.TOK_MINUS: return(new Negative());

            case Lexer.TokenType.TOK_NOTAR: return(new Not());

            case Lexer.TokenType.TOK_NOT: return(new LogNot());

            case Lexer.TokenType.TOK_PLUSPLUS: return(new Inc());

            case Lexer.TokenType.TOK_MINUSMINUS: return(new Dec());

            case Lexer.TokenType.FTOK_PLUSPLUS_PREF: return(new Inc());

            case Lexer.TokenType.FTOK_MINUSMINUS_PREF: return(new Dec());
            }
            return(null);
        }
Пример #9
0
 public UnaryExprNode(ExprNode l, Lexer.TokenType op, Lexer.Position pos) : base(ExprType.Unary, pos)
 {
     Left    = l;
     ArifmOp = op;
 }
Пример #10
0
 public AsgArifmVarNode(IdentNode l, ExprNode r, Lexer.TokenType op, Lexer.Position pos) : base(l, r, op, ExprType.AsgArifm, pos)
 {
 }
Пример #11
0
 public AsgArifmDictNode(ExprNode l, ExprNode m, ExprNode r, Lexer.TokenType op, Lexer.Position pos) : base(l, r, op, ExprType.AsgArifmDict, pos)
 {
     Key = m;
 }
Пример #12
0
 protected AsgArifmNode(ExprNode l, ExprNode r, Lexer.TokenType op, ExprType t, Lexer.Position pos) : base(l, r, t, pos)
 {
     ArifmOp = op;
 }
Пример #13
0
 public ArifmExprNode(ExprNode l, ExprNode r, Lexer.TokenType op, Lexer.Position pos) : base(l, r, ExprType.Arifm, pos)
 {
     ArifmOp = op;
 }
Пример #14
0
 public Token(Lexer.TokenType name, string value)
 {
     Name  = name;
     Value = value;
 }