private void ParseWhileStatement() { Match(TokenType.While); Match(TokenType.OpenParenthesis); _compileCommands.AddLast(new [] { "Do Nothing" }); var insertWhileAfter = _compileCommands.Tail; object condition = ParseExpression(); Match(TokenType.CloseParenthesis); bool hasBrackets = false; if (PeekNext().Type == TokenType.OpenCurlyBracket) { GetNext(); hasBrackets = true; } do { ParseStatement(); } while (hasBrackets && PeekNext().Type != TokenType.CloseCurlyBracket); if (hasBrackets) { Match(TokenType.CloseCurlyBracket); } _compileCommands.AddLast(new object[] { "$goto", insertWhileAfter }); _compileCommands.AddLast(new[] { "Do Nothing" }); _compileCommands.AddAfter(insertWhileAfter, new[] { "$while", condition, new object[] { "$goto", _compileCommands.Tail } }); }