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 override LuaStatement Parse(INextAwareEnumerator<Token> reader, IParserContext context) { reader.VerifyExpectedTokenAndMoveNext(Keywords.While); var conditionExpression = SyntaxParser.ReadExpression(reader, context); reader.VerifyExpectedTokenAndMoveNext(Keywords.Do); var blockParser = new StatementBlockParser(Keywords.End); var bodyBlock = blockParser.ParseBlock(reader, context); return new WhileStatement(conditionExpression, bodyBlock); }
public LuaStatement Parse(INextAwareEnumerator <Token> reader, IParserContext context) { reader.VerifyExpectedTokenAndMoveNext(Keywords.While); var conditionExpression = SyntaxParser.ReadExpression(reader, context); reader.VerifyExpectedTokenAndMoveNext(Keywords.Do); var blockParser = new StatementBlockParser(Keywords.End); var bodyBlock = blockParser.ParseBlock(reader, context); return(new WhileStatement(conditionExpression, bodyBlock)); }
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 override LuaStatement Parse(INextAwareEnumerator<Token> reader, IParserContext context) { StatementBlock elseBlock = null; reader.VerifyExpectedTokenAndMoveNext(Keywords.If); var conditionExpression = SyntaxParser.ReadExpression(reader, context); reader.VerifyExpectedTokenAndMoveNext(Keywords.Then); var ifBlockParser = new StatementBlockParser(Keywords.End, Keywords.Else); Token delimiterToken; var ifBlock = ifBlockParser.ParseBlock(reader, context, out delimiterToken); if (delimiterToken.Value == Keywords.Else) { var elseBlockParser = new StatementBlockParser(Keywords.End); elseBlock = elseBlockParser.ParseBlock(reader, context); } return new IfStatement(conditionExpression, ifBlock, elseBlock); }
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)); }
public LuaStatement Parse(INextAwareEnumerator <Token> reader, IParserContext context) { StatementBlock elseBlock = null; reader.VerifyExpectedTokenAndMoveNext(Keywords.If); var conditionExpression = SyntaxParser.ReadExpression(reader, context); reader.VerifyExpectedTokenAndMoveNext(Keywords.Then); var ifBlockParser = new StatementBlockParser(Keywords.End, Keywords.Else); Token delimiterToken; var ifBlock = ifBlockParser.ParseBlock(reader, context, out delimiterToken); if (delimiterToken.Value == Keywords.Else) { var elseBlockParser = new StatementBlockParser(Keywords.End); elseBlock = elseBlockParser.ParseBlock(reader, context); } return(new IfStatement(conditionExpression, ifBlock, elseBlock)); }