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()); }
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); }
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)); }
public LuaExpression Parse(INextAwareEnumerator <Token> reader, IParserContext context) { return(new StringConstantExpression(reader.GetAndMoveNext().Value)); }