Ejemplo n.º 1
0
        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 } });
        }