public override LuaStatement Parse(INextAwareEnumerator<Token> reader, IParserContext context)
 {
     var token = reader.GetAndMoveNext();
     if (string.IsNullOrWhiteSpace(token.Value) || token.Value == LuaToken.Semicolon)
         return new EmptyStatement();
     throw new UnexpectedTokenException(token);
 }
        public override LuaStatement Parse(INextAwareEnumerator<Token> reader, IParserContext context)
        {
            reader.VerifyExpectedTokenAndMoveNext(Keywords.Function);
            if (reader.Next.Value == LuaToken.Colon)
            {
                reader.MoveNext();
                reader.MoveNext();
            }
            var functionName = reader.GetAndMoveNext();
            reader.VerifyExpectedToken(LuaToken.LeftBracket);

            var argumentNames = new List<string>();
            reader.MoveNext();
            while (reader.Current.Value != LuaToken.RightBracket)
            {
                argumentNames.Add(reader.Current.Value);
                reader.MoveNext();
                reader.VerifyExpectedToken(LuaToken.Comma, LuaToken.RightBracket);
                if (reader.Current.Value == LuaToken.RightBracket)
                    break;
                reader.MoveNext();
            }
            reader.VerifyExpectedTokenAndMoveNext(LuaToken.RightBracket);
            var statementsParser = new StatementBlockParser(Keywords.End);
            var body = statementsParser.ParseBlock(reader, context);

            return new FunctionDeclarationStatement(functionName.Value,argumentNames,body);
        }
        public LuaStatement Parse(INextAwareEnumerator <Token> reader, IParserContext context)
        {
            reader.VerifyExpectedTokenAndMoveNext(Keywords.Function);
            if (reader.Next.Value == LuaToken.Colon)
            {
                reader.MoveNext();
                reader.MoveNext();
            }
            var functionName = reader.GetAndMoveNext();

            reader.VerifyExpectedToken(LuaToken.LeftBracket);

            var argumentNames = new List <string>();

            reader.MoveNext();
            while (reader.Current.Value != LuaToken.RightBracket)
            {
                argumentNames.Add(reader.Current.Value);
                reader.MoveNext();
                reader.VerifyExpectedToken(LuaToken.Comma, LuaToken.RightBracket);
                if (reader.Current.Value == LuaToken.RightBracket)
                {
                    break;
                }
                reader.MoveNext();
            }
            reader.VerifyExpectedTokenAndMoveNext(LuaToken.RightBracket);
            var statementsParser = new StatementBlockParser(Keywords.End);
            var body             = statementsParser.ParseBlock(reader, context);

            return(new FunctionDeclarationStatement(functionName.Value, argumentNames, body));
        }
        public LuaStatement Parse(INextAwareEnumerator <Token> reader, IParserContext context)
        {
            var token = reader.GetAndMoveNext();

            if (string.IsNullOrWhiteSpace(token.Value) || token.Value == LuaToken.Semicolon)
            {
                return(new EmptyStatement());
            }
            throw new UnexpectedTokenException(token);
        }
        public override LuaExpression Parse(INextAwareEnumerator<Token> reader, IParserContext context)
        {
            reader.VerifyExpectedTokenAndMoveNext(LuaToken.DoubleQuote, LuaToken.DoubleLeftSquareBracket);
            var builder = new StringBuilder();
            while (reader.HasNext && reader.Current.Value != LuaToken.DoubleQuote &&
                   reader.Current.Value != LuaToken.DoubleRightSquareBracket)
                builder.Append(reader.GetAndMoveNext());
            reader.VerifyExpectedTokenAndMoveNext(LuaToken.DoubleQuote, LuaToken.DoubleRightSquareBracket);

            return new StringConstantExpression(builder.ToString());
        }
Beispiel #6
0
        public static LuaExpression ReadExpression(INextAwareEnumerator <Token> reader, IParserContext context)
        {
            var expressionParser = ExpressionParserDiscriminator.Identify(reader, context);
            var expression       = expressionParser.Parse(reader, context);

            if (LuaToken.IsBinaryOperation(reader.Current.Value))
            {
                var operation           = reader.GetAndMoveNext();
                var rightSideExpression = ReadExpression(reader, context);
                expression = new BinaryExpression(expression, rightSideExpression, operation.Value);
            }

            return(expression);
        }
Beispiel #7
0
        public static LuaExpression ReadExpression(INextAwareEnumerator<Token> reader, IParserContext context)
        {
            var expressionDiscriminator = new ExpressionParserDiscriminator();
            var expressionParser = expressionDiscriminator.Identify(reader);
            var expression = expressionParser.Parse(reader, context);

            if (LuaToken.IsBinaryOperation(reader.Current.Value))
            {
                var operation = reader.GetAndMoveNext();
                var rightSideExpression = ReadExpression(reader,context);
                expression = new BinaryExpression(expression,rightSideExpression,operation.Value);
            }

            return expression;
        }
        public override LuaStatement Parse(INextAwareEnumerator<Token> reader, IParserContext context)
        {
            reader.VerifyExpectedTokenAndMoveNext(Keywords.For);
            var scope = context.AcquireScope();
            reader.VerifyIsIdentifier();
            var forVariableName = reader.GetAndMoveNext();
            reader.VerifyExpectedTokenAndMoveNext(LuaToken.EqualsSign);
            var conditionsParser = new ExpressionListParser();
            var conditions = conditionsParser.Parse(reader, context).ToList();
            reader.VerifyExpectedTokenAndMoveNext(Keywords.Do);

            var statementsParser = new StatementBlockParser(Keywords.End);
            var bodyBlock = statementsParser.ParseBlock(reader, context);
            context.ReleaseScope(scope);
            return new ForStatement(conditions,bodyBlock);
        }
        public LuaStatement Parse(INextAwareEnumerator <Token> reader, IParserContext context)
        {
            reader.VerifyExpectedTokenAndMoveNext(Keywords.For);
            var scope = context.AcquireScope();

            reader.VerifyIsIdentifier();
            var forVariableName = reader.GetAndMoveNext();

            reader.VerifyExpectedTokenAndMoveNext(LuaToken.EqualsSign);
            var conditionsParser = new ExpressionListParser();
            var conditions       = conditionsParser.Parse(reader, context).ToList();

            reader.VerifyExpectedTokenAndMoveNext(Keywords.Do);

            var statementsParser = new StatementBlockParser(Keywords.End);
            var bodyBlock        = statementsParser.ParseBlock(reader, context);

            context.ReleaseScope(scope);
            return(new ForStatement(conditions, bodyBlock));
        }
Beispiel #10
0
 public LuaExpression Parse(INextAwareEnumerator <Token> reader, IParserContext context)
 {
     return(new StringConstantExpression(reader.GetAndMoveNext().Value));
 }