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); } }