/// <summary> /// Parser for LetStatement /// </summary> /// <returns>Parsed LetStatement</returns> public LetStatement ParseLetStatement() { LetStatement letStatement = new LetStatement(); //Skip let token NextToken("let", "let assignment+ in statement* end", "let"); //Parse arguments while(TokenStream.HasNext()) { if(TokenStream.Peek(1).GetValue().ToString() == "in") { break; //no more assignments left } letStatement.AddAssignment(ParseAssignment()); } if (letStatement.GetAssignments().Count == 0) { //No assignments is not allowed throw new UnexpectedToken("LetStatement doesn't contain assignments.", "Expected at least one assignment ", CurrentToken.GetLine()); //throw new UnexpectedToken(); } //Skip in token NextToken("in", "let assignment+ in statement* end", "in"); //Parse statements while (TokenStream.HasNext()) { if (TokenStream.Peek(1).GetValue().ToString() == "end") { //No more statements left break; } letStatement.AddStatement(ParseStatement()); } //Skip end token NextToken("end", "let assignment+ in statement* end", "end"); return letStatement; }