Ejemplo n.º 1
0
        private void GetTernaryExpression()
        {
            GetUnaryExpression();

            if (_lexer.LookAheadToken().Type == Token.EType.QUESTIONMARK)
            {
                var trueBlock  = new InstructionBlock();
                var falseBlock = new InstructionBlock();
                var exitBlock  = new InstructionBlock();
                var exitJump   = new JumpInstruction(exitBlock);

                var conditionalJump = new ConditionalJumpInstruction(trueBlock, falseBlock);
                _compilerEnvironment.AddInstruction(conditionalJump);

                _lexer.Expect(Token.EType.QUESTIONMARK);

                _compilerEnvironment.SetCurrentBlock(trueBlock);
                GetUnaryExpression();
                _compilerEnvironment.AddInstruction(exitJump);


                _lexer.Expect(Token.EType.COLON);

                _compilerEnvironment.SetCurrentBlock(falseBlock);
                GetUnaryExpression();
                _compilerEnvironment.AddInstruction(exitJump);


                _compilerEnvironment.SetCurrentBlock(exitBlock);
            }
        }