public static IExpression ParseExpression(ConsideredTokens consideredTokens, Action tweakTokens, out ParseError error)
        {
            error = null;
            switch (consideredTokens.Current.Type)
            {
            case TokenType.INT:
            {
                if (consideredTokens.Next.Type == TokenType.SEMICOLON)
                {
                    var expression = new IntegerLiteralExpression(consideredTokens.Current);
                    tweakTokens();
                    tweakTokens();
                    return(expression);
                }

                if (consideredTokens.Next.Type == TokenType.PLUS)
                {
                    return(ParseOperatorExpression(consideredTokens, tweakTokens, out error));
                }
            }
            break;

            default: throw new NotImplementedException();
            }
            throw new NotImplementedException();
        }
        public IStatement Parse(ConsideredTokens consideredTokens, Action tweakTokens, out ParseError error)
        {
            var letToken = consideredTokens.Current;

            tweakTokens();


            if (consideredTokens.Current.Type != TokenType.IDENT)
            {
                error = new ParseError(StatementType.Let, TokenType.IDENT, consideredTokens.Current.Type);
                tweakTokens();
                return(null);
            }
            var identifer = new Identifier(consideredTokens.Current);

            tweakTokens();


            if (consideredTokens.Current.Type != TokenType.ASSIGN)
            {
                error = new ParseError(StatementType.Let, TokenType.ASSIGN, consideredTokens.Current.Type);
                tweakTokens();
                return(null);
            }
            tweakTokens();
            var value = ExpressionParser.ParseExpression(consideredTokens, tweakTokens, out var errorExpression);

            error = value == null
                ? errorExpression
                : ParseError.None;

            return(new LetStatement(letToken, identifer, value));
        }
Exemple #3
0
        public IStatement Parse(ConsideredTokens consideredTokens, Action tweakTokens, out ParseError error)
        {
            var returnToken = consideredTokens.Current;

            tweakTokens();


            var value = ExpressionParser.ParseExpression(consideredTokens, tweakTokens, out var errorExpression);

            error = value == null
                ? errorExpression
                : ParseError.None;
            return(new ReturnStatement(returnToken, value));
        }
 private static IExpression ParseOperatorExpression(ConsideredTokens consideredTokens, Action tweakTokens, out ParseError error)
 {
     throw new NotImplementedException();
 }
Exemple #5
0
 public IStatement Parse(ConsideredTokens consideredTokens, Action tweakTokens, out ParseError error)
 {
     throw new NotImplementedException();
 }